mongodb使用find查询获取的游标是否可以遍历出查询执行后的数据库新增的记录
phpcn_u1582
phpcn_u1582 2017-04-24 16:00:18
0
2
1084

mongodb使用find查询返回的游标,是否可以遍历出查询执行后(记录比较多查询时间比较长,此时查询还未执行完)数据表新增的记录。
例如:
线程A在时间点t1使用find查询数据表user返回游标,遍历数据记录。
线程B在时间点t2使用insert向数据表user插入记录。
线程B在时间点t3执行完成。
线程A在时间点t4执行完成。
时间:t1 < t2 < t3 < t4
问:线程A是否可以查询到线程B新增的记录?

phpcn_u1582
phpcn_u1582

répondre à tous(2)
Ty80

C'est une très bonne question, en termes simples, MongoDB ne garantit pas si le résultat contient de nouveaux documents car il implique plusieurs documents, même des documents qui pourraient être insérés dans le futur. Dans une base de données traditionnelle, il est possible de lire des valeurs nouvellement insérées. Cette anomalie est appelée Phantom. Le niveau d'isolement qui peut satisfaire cela est le plus élevé sérialisable, c'est-à-dire dans l'exemple, les deux ensembles d'opérations, une seule lecture. et une écriture, semblent être exécutées l'une après l'autre. Le coût de mise en œuvre du mécanisme de verrouillage est également très élevé et les performances sont relativement médiocres. Voir ce document. De retour à MongoDB, MongoDB utilise les documents comme unités et peut assurer une isolation au niveau du document, mais il ne garantit pas l'isolation (indépendance) des opérations entre plusieurs documents et ne prend pas en charge les transactions, en échange de hautes performances.

@huadu a raison. Lorsque vous testez, utilisez find().batchSize(2) pour lire 2 documents dans chaque lot, et vous constaterez que les documents nouvellement ajoutés peuvent être lus. La taille de lot par défaut dans le shell est de 20, ce qui peut ne pas être facile à observer. N'utilisez pas batchSize(1), qui est égal à limit() pour des raisons historiques.

曾经蜡笔没有小新

Pas nécessairement.

Le curseur mongodb n'a pas d'isolation et peut renvoyer des données mises à jour.

Cependant, lors de tentatives réelles, il a été constaté que, quelle que soit la manière dont il était inséré, le curseur ne pouvait jamais renvoyer les données nouvellement insérées. Il peut s'agir d'un détail d'implémentation de mongodb, ou il se peut que le curseur ne puisse accéder aux données nouvellement insérées que dans certaines circonstances particulières. En bref, il n'existe aucun support de documentation et il ne faut pas se fier à ce comportement.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal