190 votes

Ce que l'évolutivité des problèmes avez-vous rencontrés à l'aide d'une banque de données NoSQL?

NoSQL se réfère à des données non relationnelles magasins en rupture avec l'histoire des bases de données relationnelles et de l'ACIDE garanties. Open source les plus populaires NoSQL magasins de données comprennent:

  • Cassandra (tableaux, écrit en Java, utilisé par Cisco WebEx, Digg, Facebook, IBM, Mahalo, Rackspace, Reddit et Twitter)
  • CouchDB (document, écrit en Erlang, utilisé par la BBC et le Moteur de la Cour)
  • Dynomite (clé-valeur, écrit en Erlang, utilisé par l'ensemble des parties)
  • HBase (clé-valeur, écrit en Java, utilisé par Bing)
  • Hypertable (tableaux, écrit en C++, utilisé par Baidu)
  • Kai (clé-valeur, écrit en Erlang)
  • MemcacheDB (clé-valeur, écrit en C, utilisé par Reddit)
  • MongoDB (document, écrit en C++, utilisé par Electronic Arts, Github, le NY Times et le site de Sourceforge)
  • Neo4j (graphique, écrite en Java, utilisé par certaines universités suédoises)
  • Projet de Voldemort (clé-valeur, écrit en Java, utilisé par LinkedIn)
  • Redis (clé-valeur, écrit en C, utilisé par Craigslist, Engine Yard et Github)
  • Riak (clé-valeur, écrit en Erlang, utilisé par Comcast et Mochi Media)
  • Ringo (clé-valeur, écrit en Erlang, utilisé par Nokia)
  • Scalaris (clé-valeur, écrit en Erlang, utilisé par OnScale)
  • Terrastore (document, écrit en Java)
  • ThruDB (document, écrit en C++, utilisé par JunkDepot.com)
  • Tokyo Armoire/Tokyo Tyrant (clé-valeur, écrit en C, utilisé par Mixi.jp (Japonais site de réseautage social))

Je voudrais savoir à propos des problèmes spécifiques vous - le lecteur - ont résolu à l'aide de banques de données, et ce NoSQL magasin de données que vous avez utilisées.

Questions:

  • Ce que les problèmes d'évolutivité avez-vous utilisé magasins de données NoSQL de résoudre?
  • Ce NoSQL banque de données utilisez-vous?
  • La base de données, avez-vous utilisé avant de passer à une banque de données NoSQL?

Je suis à la recherche d'expériences, de sorte s'il vous plaît ne pas répondre, sauf si vous avez que.

50voto

Brian Points 4716

Mon projet actuel, en fait.

Le stockage de 18 000 objets dans une structure normalisée: de 90 000 lignes sur 8 tables différentes. A fallu 1 minute pour les extraire et de les mapper à notre modèle d'objet Java, c'est avec tout correctement indexé etc.

Les stockant comme des paires clé/valeur à l'aide d'un léger représentation de texte: 1 table, de 18 000 lignes, 3 secondes pour récupérer tous de et de reconstruire les objets Java.

En termes commerciaux: une première option n'a pas été possible. Deuxième option signifie que notre application fonctionne.

Détails techniques: en cours d'exécution sur MySQL pour SQL et NoSQL! Coller avec de MySQL pour la bonne opération de soutien, de performances et de résultats prouvés pour ne pas corrompre des données, mise à l'échelle assez bien, prise en charge des clusters, etc.

Notre modèle de données dans MySQL est maintenant juste la clé des champs (entiers) et le grand champ "valeur": juste un grand champ de TEXTE de base.

Nous n'avons pas aller avec l'un des nouveaux joueurs (CouchDB, Cassandra, MongoDB, etc), parce que bien qu'ils offrent beaucoup de fonctionnalités/performances dans leur propre droit, il y avait toujours des inconvénients pour notre cas (par exemple, manquant/immatures support de Java).

L'avantage supplémentaire de (ab)à l'aide de MySQL - les éléments de notre modèle de faire le travail de manière relationnelle peut être facilement lié à notre magasin de clé/valeur des données.

Mise à jour: voici un exemple de la façon dont nous avons représenté le contenu du texte, pas de notre domaine d'activité (nous ne travaillons pas avec des "produits") que mon patron avait tirer sur moi, mais exprime l'idée, y compris l'aspect récursif (une seule entité, ici un produit, le "contenant" d'autres). J'espère que c'est clair comment dans une structure normalisée cela pourrait être tout à fait une quelques tables, par exemple, se joindre à un produit à sa gamme de saveurs, d'autres produits sont contenus, etc

Name=An Example Product
Type=CategoryAProduct
Colour=Blue
Size=Large
Flavours={nice,lovely,unpleasant,foul}
Contains=[
Name=Product2
Type=CategoryBProduct
Size=medium
Flavours={yuck}
------
Name=Product3
Type=CategoryCProduct
Size=Small
Flavours={sublime}
]

49voto

tux21b Points 17336

J'ai basculé d'un petit sous-projet de MySQL à CouchDB, pour être en mesure de gérer la charge. Le résultat a été incroyable.

Environ 2 ans, nous avons publié une auto écrite logiciel sur http://www.ubuntuusers.de/ (qui est probablement le plus grand allemand Linux site web de la communauté). Le site est écrit en Python et nous avons ajouté un WSGI middleware qui a réussi à attraper toutes les exceptions et les envoyer à une autre petite MySQL alimenté site web. Ce petit site web utilisé une table de hachage afin de déterminer les différents bugs et stocké le nombre d'occurrences et la dernière occurrence.

Malheureusement, peu de temps après la libération, le traceback-enregistreur de site web n'était pas répond plus. Nous avons eu quelques problèmes de verrouillage de la base de données de production de notre site principal qui était de lever des exceptions près de chaque demande, ainsi que plusieurs autres bugs, dont nous n'avons pas exploré au cours de la phase de test. Le cluster de serveurs de notre site principal, appelé le traceback-enregistreur de présenter la page plusieurs k fois par seconde. Et c'était une façon trop pour le petit serveur où est hébergé le traceback enregistreur (c'était déjà un vieux serveur, qui a été utilisé uniquement à des fins de développement).

À ce moment-CouchDB est plutôt populaire, et j'ai donc décidé de l'essayer et d'écrire un petit traceback-logger avec elle. Le nouvel enregistreur ne se composait que d'un seul fichier python, qui a fourni une liste de bugs avec le tri et les options de filtre et une soumission de la page. Et dans le fond, j'ai commencé un CouchDB processus. Le nouveau logiciel a répondu très rapidement à toutes les demandes et nous avons été en mesure d'afficher la quantité massive de automatique des rapports de bogues.

Une chose intéressante est que la solution avant de, a été en cours d'exécution sur un vieux serveur dédié, où la nouvelle CouchDB de site sur l'autre main est seulement en cours d'exécution sur un serveur partagé instance de xen avec des ressources très limitées. Et je n'ai même pas la force de clés-valeurs de magasins à l'échelle horizontale. La capacité de CouchDB / Erlang OTP pour gérer les demandes simultanées sans verrouillage de rien était déjà suffisant pour répondre aux besoins.

Maintenant, rapidement écrit CouchDB-traceback enregistreur est toujours en cours et est un moyen très utile pour explorer les bugs sur le site web principal. De toute façon, une fois par mois environ de la base de données devient trop gros et le CouchDB le processus est tué. Mais alors, le compact-db commande de CouchDB réduit la taille de plusieurs go à quelques KBs de nouveau et la base de données est en place et fonctionne à nouveau (je devrais peut-être envisager d'ajouter une tâche cron... 0o).

En résumé, CouchDB est sûrement le meilleur choix (ou au moins un meilleur choix que MySQL) pour ce sous-projet et il fait bien son travail.

22voto

Jim Ferrans Points 13673

Todd Hoff de l' highscalability.com a beaucoup de la couverture de NoSQL, y compris des études de cas.

Le commercial Vertica colonnes SGBD peut convenir à vos fins (même si elle prend en charge SQL): il est très rapide par rapport aux relationnel Sgbd pour l'analyse des requêtes. Voir Stonebraker, et al.'s récente CACM papier contrastées Vertica avec map-reduce.

Mise à jour: Et Twitter sélectionné Cassandra sur plusieurs autres, y compris HBase, Voldemort, MongoDB, MemcacheDB, Redis, et HyperTable.

Mise à jour 2: Rick Cattell vient de publier un comparatif de plusieurs NoSQL systèmes de Haute Performance de Magasins de Données. Et highscalability.com s'prendre de Rick papier est ici.

8voto

serbaut Points 2351

Nous avons déménagé une partie de nos données de mysql vers mongodb, pas tellement pour l'évolutivité, mais plus parce que c'est un meilleur ajustement pour les fichiers et non des données tabulaires.

Dans la production, nous stockons actuellement:

  • 25 milliers de dossiers (60 GO)
  • 130 millions d'autres "documents" (350GB)

avec un chiffre d'affaires quotidien d'environ 10 GO.

La base de données est déployé dans un "jumelé" configuration sur les deux nœuds (6x450GB sas raid 10) avec apache/wsgi/python clients à l'aide de la mongodb l'api python (pymongo). Le disque d'installation est probablement excessif, mais c'est ce que nous utilisons pour mysql.

En dehors de quelques problèmes avec pymongo threadpools et le blocage de la nature du serveur mongodb a été une bonne expérience.

5voto

TwentyMiles Points 2111

Je m'excuse pour aller à l'encontre de votre texte en gras, car je n'ai pas d'expérience de première main, mais cette série de billets de blog en est un bon exemple de la résolution d'un problème avec CouchDB.

CouchDB: Une Étude De Cas

Essentiellement, le textme application utilisée CouchDB avec leur explosion problème de données. Ils ont constaté que SQL a été trop lent pour traiter de grandes quantités de données d'archives, et l'a déplacé plus de CouchDB. C'est une excellente lecture, et il traite de l'ensemble du processus de trouver quels sont les problèmes de CouchDB pourrait résoudre et comment ils ont fini de les résoudre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X