2010-08-15 6 views
12

J'ai un couple de dbs sqlite (je dirais environ 15GBs), avec environ 1m de lignes au total - donc pas super gros. Je regardais mongodb, et il semble assez facile de travailler avec, surtout si je veux essayer et faire un traitement de base du langage naturel sur les documents qui composent les bases de données.Mongodb - les problèmes de fiabilité sont-ils encore importants?

Je n'ai jamais travaillé avec Mongo dans le passé, je n'aurais pas à apprendre de zéro (je travaillerai en python). Après avoir parcouru quelques pages, je suis tombé sur un certain nombre d'histoires horribles à propos de Mongodb re. fiabilité. Est-ce toujours un problème majeur? Dans un crunch, je vais bien sûr conserver les sauvegardes sqlite, mais je préfère ne pas avoir à reconstruire mes bases de données mongo en permanence.

Vous vous demandez simplement à quel type de problèmes de corruption de données les utilisateurs ont récemment dû faire face avec Mongo? Est-ce une grande préoccupation?

Merci!

Répondre

9

Oui, la durabilité est un gros problème chez mongo. Vous devez utiliser des ensembles de réplication dans mongodb pour la durabilité (vous avez besoin d'au moins 2 machines), sinon vous pouvez perdre jusqu'à 1 minute en cas de panne de courant par exemple. Il n'y a pas de durabilité de serveur unique en mongo, mais il sera développé pour 1.7-1.8 comme je sais. Après un accident, vous devez réparer db manuellement et l'opération rapair peut prendre des heures si vos données sont grandes. Il n'y a pas de transaction ou d'acide, donc ce n'est pas adapté à une application de commerce électronique ou bancaire. Vous ne devez pas utiliser les versions de développement de mongo (les versions impaird comme 1.3.x, 1.5.x, 1.7.x sont des versions de développement) et vous préférez utiliser des systèmes d'exploitation 64 bits. Si vous creusez dans des articles de désastre sur le Web au sujet de Mongo, la source du problème est ces deux dans la plupart des cas.CouchDB, Cassandra et postgresql ont tous une forte durabilité (fsync est 10 millisecondes par défaut dans cassandra et postgresql), donc ils ont tous une durabilité de serveur unique.

Si vous avez besoin d'une évolutivité, d'une tolérance aux pannes et d'un équilibrage de charge faciles à atteindre, Cassandra est le meilleur, mais avec des options de requête médiocres. Les nœuds défaillants peuvent s'en aller et revenir après un certain temps, sans problème, le système se répare automatiquement.

EDIT: mongo 1.8 est venu avec journalisation (permet la durabilité), mais ce n'est pas le réglage par défaut. Prenez également regarder ce http://news.ycombinator.com/item?id=2684423

Cordialement,

Serdar Irmak

+0

Intéressant - 64bit et les versions de dev semblent assez souvent apparaître dans les messages que j'ai regardés. Je pense que mongo m'a rendu assez curieux que je vais l'essayer, mais assurez-vous que j'ai aussi une option de sauvegarde db compatible ACID. – malangi

+1

Mongo est la solution nosql la plus populaire aujourd'hui (l'une des raisons est son marketing agile depuis 10gen). si vous creusez dans leurs références de site, la plupart du temps il est utilisé pour des données de haute performance de faible valeur comme les analyses (par exemple: pour le reporting, la journalisation des erreurs, les compteurs de pages vues, les compteurs internes, etc.). Il y a aussi des sites (pas tellement) qui l'utilisent pour toutes ses données. – sirmak

+2

Il y a beaucoup de sites qui l'utilisent pour des données réelles ces jours-ci. http://www.mongodb.org/display/DOCS/Production+Deployments a beaucoup de déploiements de haut niveau; Parmi les sites qui l'utilisent pour les «données réelles», citons Sourceforge, Foursquare, Wordnik et Business Insider. –

3

Mongo n'a pas de propriétés ACID, en particulier la durabilité. Vous pouvez donc faire face à des problèmes si le processus ne s'arrête pas proprement ou si la machine perd de la puissance. Vous êtes censé mettre en œuvre des sauvegardes et de la redondance pour gérer cela.

4

"MongoDB prend en charge une architecture de fragmentation automatisée, permettant une mise à l'échelle horizontale sur plusieurs nœuds." - source Vous devez donc exécuter plusieurs nœuds pour la prise en charge de l'équilibrage et du basculement. Si vous voulez exécuter une seule instance qui ne manquera pas si l'alimentation est soudainement perdue, vous avez besoin de quelque chose qui supporte ACID comme couchDB. Cela étant dit, j'ai utilisé mongo au travail pendant un mois et il ne s'est pas écrasé sur moi, mais nous passons à un cluster de 6 nœuds bientôt.

Durabilité

Les produits prennent différentes approches de durabilité. CouchDB est une conception "crash-only" où le db peut se terminer à tout moment et reste cohérent. MongoDB adopte une approche différente pour la durabilité. Sur une machine crash, on exécute alors une opération repairDatabase() lorsque redémarre (similaire à MyISAM). MongoDB recommande l'utilisation de la réplication - LAN ou WAN - pour une réelle durabilité car un serveur donné peut être définitivement mort ( ). Pour résumer: CouchDB est mieux à la durabilité lorsque en utilisant un seul serveur sans réplication .

Citation du site officiel de mongodb.org.

2

Je ne vois pas le problème si vous avez les mêmes données aussi dans les sauvegardes SQLite. Vous pouvez toujours remplir vos bases de données MongoDb. Le remplissage ne prendra que quelques minutes.

+0

+1. et vous ne devrez pas le faire "constamment", mais seulement après une coupure de courant du serveur (ou quelque chose d'autre qui a causé le crash de mongod dans la minute qui a suivi la dernière opération de mise à jour). Dans votre cas, vous n'avez aucune mise à jour, n'est-ce pas? – Thilo

10

Comme d'autres l'ont dit, MongoDB n'a pas la durabilité d'un seul serveur en ce moment. Heureusement, c'est mort facile pour configurer la réplication multi-nœud. Vous pouvez même configurer une deuxième machine dans un autre centre de données et avoir des données automatiquement répliquées en direct!

Si une écriture doit réussir, vous pouvez faire de ne pas retourner Mongo d'un insert/mise à jour jusqu'à ce que les données ont été reproduites à n esclaves. Cela garantit que vous avez au moins n copies des données. Les ensembles de réplicas vous permettent d'ajouter et de supprimer des nœuds de votre cluster à la volée sans aucun travail important; il suffit d'ajouter un nouveau noeud et il va automatiquement synchroniser une copie des données. Supprimer un noeud et le cluster se rééquilibre. Il est très conçu pour être utilisé sur plusieurs machines, avec plusieurs nœuds agissant en parallèle; c'est sa configuration par défaut préférée, comparée à quelque chose comme MySQL, qui attend qu'une machine géante fasse son travail, et que vous pouvez ensuite coupler avec des esclaves lorsque vous avez besoin de l'étendre. C'est une approche différente du stockage et de la mise à l'échelle des données, mais très confortable si vous prenez le temps de comprendre sa différence d'hypothèses et comment construire une architecture qui mette à profit ses points forts.

+0

+1 pour l'aperçu détaillé - semble être un paradigme différent, très excitant! – malangi

Questions connexes