Comment planifier des mises à jour d'index dans CouchDB
Question
Pour autant que je sache, les index CouchDB sont mis à jour lorsqu’une vue est interrogée. En supposant qu'il y ait plus de lectures que d'écritures, n'est-ce pas mauvais pour la mise à l'échelle? Comment pourrais-je configurer CouchDB pour mettre à jour les index en écriture, ou mieux encore, selon un calendrier?
La solution
CouchDB régénère les vues lors de la mise à jour, mais uniquement de ce qui a changé depuis le dernier accès en lecture à la vue. En supposant que votre volume de lecture soit largement supérieur à votre volume en écriture, cela ne devrait pas poser de problème.
Lorsque vous modifiez simultanément un grand nombre de documents, vous risquez de perdre un temps considérable lors de la première demande de lecture. Pour remédier à cela, différentes possibilités ont été suggérées. La plupart dépendent de l’enregistrement avec les notifications de mise à jour de CouchDB et du déclenchement automatique de la lecture.
Un exemple de script permettant de faire exactement cela est disponible sur le wiki CouchDB à l'adresse [1].
Autres conseils
a) "Mise à l'échelle" est un terme tellement surchargé. Quel "genre"? de mise à l'échelle faites-vous allusion? (De toute façon, je ne vois pas en quoi cela vous affecte négativement).
b) Mise à jour sur les écritures: interrogez simplement votre vue après une écriture. Notez que l'ajout d'un tas de données à l'index est plus convivial pour les ressources (cela n'est pas spécifique à CouchDB). Donc, vous voudrez peut-être déclencher votre affichage à chaque N écrit.
c) Programmé: configurez une tâche cron qui interroge votre vue toutes les M minutes.
d) Attendez que CouchDB évolue pour vous fournir l'infrastructure qui vous permettra de le configurer avec un paramètre de configuration.
e) (MEILLEURE OPTION). Sèche tes mains et aide-nous à polir CouchDB! Toutes les contributions sont très appréciées.
Vous ne pouvez pas et pourquoi voudriez-vous cela?
Pensez-y comme ça:
- Lorsque vous importez des données dans MySQL, vous pouvez activer indignes, car il est plus coûteux de mettre à jour l'index pour chaque ligne que vous insérez que de mettre à jour l'index pour 100 écritures (ou le nombre de lignes que vous importez) en une seule exécution. .
- C’est pourquoi CouchDB met à jour l’index en lecture car il est moins coûteux d’intégrer ces 100 modifications en même temps, puis chaque modification lorsqu’elle est écrite.
C’est l’un des avantages de CouchDB! :) Je ne dis pas qu'il s'agit uniquement d'une fonctionnalité de CouchDB, mais il est simplement intelligent de le faire en lecture.
Une chose que vous pouvez faire est de lire avec update = false, qui est une lecture sale et peut ne pas retourner ce que vous attendez. Si vous le faites toujours, vous pouvez programmer un événement "normal". lire un travail cron et mettre à jour votre index avec cela. Je ne pense pas que cela ait un sens.