Il y a quelques points à propos de cette question.
-
Vous n'êtes pas assuré d'avoir une cohérence en lecture après écriture à moins que vous n'utilisiez soit
"safe=true"
,"w=1"
(ou supérieur) ou"j=true"
avec votre écriture. Vous pouvez soit les inclure dans le cadre de l'insert() ou deupdate()
commandes, ou bien utilisezset_lasterror_options()
pour définir ces options pour la connexion, la base de données ou la collection que vous utilisez. -
Si vous autorisez les lectures à partir de nœuds secondaires (par exemple, une ReadPreference autre que PRIMARY), vous n'obtiendrez pas de sémantique de lecture après écriture, mais uniquement une cohérence éventuelle.
-
Si vous utilisez une ReadPreference de PRIMARY et que vous définissez les options lasterror appropriées, vous êtes assuré d'obtenir une sémantique de lecture après écriture sur toutes les opérations qui utilisent le même socket, c'est-à-dire le même thread.
-
Si vous utilisez plusieurs threads et que vous ne lisez PAS à partir de nœuds secondaires, vous êtes assuré d'obtenir une cohérence lecture après écriture tant que vous émettez la lecture dans le deuxième thread une fois l'écriture terminée dans le premier thread. Vous pouvez utiliser des primitives de synchronisation de thread standard pour vous en assurer.