我知道mongojava驱动程序会重试 collection.find() ,以及大多数其他读取操作。但我在文档或驱动程序源代码中看不到任何地方-它会重试吗 DBCursor.next() 或者 DBCursor.hasNext() ?
collection.find()
DBCursor.next()
DBCursor.hasNext()
tsm1rwdh1#
collection.find() 将重试整个集合,很清楚。现在,如果你用的是 while 操作,然后您可以使用 hasNext() 操作,以便在没有更多元素时中断操作。
while
hasNext()
while(cursor.hasNext()){ system.out.println(cursor.next()) }
gwo2fgha2#
不,它不会重试基于游标的读取。无法重试cursor.getmore(),因为客户端无法识别游标是否已高级。换句话说,由于驱动程序不知道最初的getmore()是否成功,因此驱动程序无法可靠地知道结果是否会被无意中跳过。更多详情请点击这里-https://github.com/mongodb/specifications/blob/master/source/retryable-reads/retryable-reads.rst#implementing-可重试读取
2条答案
按热度按时间tsm1rwdh1#
collection.find()
将重试整个集合,很清楚。现在,如果你用的是
while
操作,然后您可以使用hasNext()
操作,以便在没有更多元素时中断操作。gwo2fgha2#
不,它不会重试基于游标的读取。
无法重试cursor.getmore(),因为客户端无法识别游标是否已高级。换句话说,由于驱动程序不知道最初的getmore()是否成功,因此驱动程序无法可靠地知道结果是否会被无意中跳过。
更多详情请点击这里-https://github.com/mongodb/specifications/blob/master/source/retryable-reads/retryable-reads.rst#implementing-可重试读取