Qu'est ce qu'un Curseur dans MongoDB?

Nous sommes troublés par finalement survenant cursor not found exceptions pour certains Morphia Requêtes asList et j'ai trouvé un l'allusion sur DONC, que cela pourrait être tout à fait mémoire de consommation.

Maintenant, je voudrais en savoir un peu plus sur le fond: peut sombody expliquer (en anglais), ce qu'un Curseur (MongoDB) est en réalité? Pourquoi ne peut-il maintenu ouvert ou ne pas être trouvé?


La documentation définit un curseur:

Un pointeur vers le résultat d'une requête. Les Clients peuvent parcourir un curseur pour récupérer les résultats. Par défaut, les curseurs de délai d'attente après 10 minutes d'inactivité

Mais ce n'est pas très révélateur. Peut-être il pourrait être utile de définir un batch pour les résultats de la requête, parce que le documentation indique également:

Le serveur MongoDB renvoie les résultats de la requête dans les lots. La taille des lots ne pourra pas dépasser le maximum BFILS de la taille du document. Pour la plupart des requêtes, le premier lot de retours 101 documents ou juste assez de documents pour dépasser 1 mo. Ultérieure de la taille des lots est de 4 mégaoctets. [...] Pour les requêtes qui comprennent une opération de tri sans index, le serveur doit charger tous les documents dans la mémoire pour effectuer le tri avant de retourner les résultats.

Remarque: dans nos requêtes en question, nous n'utilisons pas de tri à tous les états, mais aussi pas de limit et offset.

Je pense que votre question est s'égarer du sujet, vous devriez vous demander à propos de. Si vous êtes en effet la réception de "curseur introuvable" exceptions, alors question d'un défaut sur votre mise en œuvre du code. Une discussion plus large de ce qu'est un curseur "est en fait" plus de "plus large de la conception à la question" que quelque chose qui résout un problème de programmation spécifique, comme quoi ce site est fait pour, Donc "trop de rodomontades sur les curseurs, et pas assez de code qui pourrait être à l'origine du problème". En fait, votre question ressemble il est demandé pour une thèse expliquant ce qu'est un curseur. Juste de montrer un peu de code.
Le point est, que la présence de ces exceptions dépend de l'environnement. Actuellement, nous ne savons pas de quel paramètre (mémoire, CPU, peu importe) est la clé. Donc je suis intéressé par quelques background. Notre code ressemble à ds.find(Translation.class).asList() (ds est un Morphia.Datastrore).
Si vous exécutez mongo dans un jeu de réplicas le curseur sera perdu si vos serveurs décide sur un autre nœud principal.
Vous êtes tellement vrai. Vous avez besoin d'un seed list de serveurs, de ne jamais utiliser votre propre solution d'équilibrage de charge. Description.

OriginalL'auteur BairDev | 2016-04-21