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 Engine Yard)
- 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.
- bignose: j'ai vue la prime que mon 550 réputation astuce donnée à la personne qui fournit la plus instructive réponse 🙂
- N'oubliez pas de solutions comme des pierres précieuses/S - un magasin d'objets Smalltalk.
- Ne manquez pas OrientDB (orientechnologies.com)
Vous devez vous connecter pour publier un commentaire.
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/ (ce 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 en tant que bien.
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 là... 0o).
Dans un 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.
Mon projet actuel, en fait.
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.
De les stocker 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).
Avantage supplémentaire de (ab)à l'aide de MySQL - les bits de notre modèle ne de travail sur le plan relationnel 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, où d'autres produits sont contenues, etc
Todd Hoff est highscalability.com a beaucoup de 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 est sélectionné Cassandra plus de plusieurs autres, y compris HBase, Voldemort, MongoDB, MemcacheDB, Redis, et HyperTable.
Mise à jour 2: Rick Cattell vient de publier une comparaison de plusieurs systèmes NoSQL dans Haute Performance De Magasins De Données. Et highscalability.com s'prendre de Rick papier est ici.
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:
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.
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.
Nous avons déplacé certaines de nos données, nous avons utilisé pour stocker dans Postgresql et Memcached dans Redis. Valeur de la clé de magasins sont beaucoup mieux adapté pour le stockage hiérarchique des données d'objet. Vous pouvez stocker des données blob beaucoup plus rapidement et avec beaucoup moins de temps de développement et d'efforts que d'utiliser un ORM pour carte votre blob dans un SGBDR.
J'ai un open source c# redis client qui vous permet de stocker et de récupérer des objets POCO avec 1 ligne:
Valeur de la clé de magasins sont également beaucoup plus facile de "scale-out", comme vous pouvez ajouter un nouveau serveur, puis partitionner votre charge uniformément afin d'inclure le nouveau serveur. Surtout, il n'y a pas de serveur central qui limite vos évolutivité. (même si vous aurez toujours besoin d'une stratégie cohérente de hachage à distribuer à vos demandes).
Je considère Redis à être une "géré fichier texte" sur les stéroïdes qui fournit rapide, concurrent et accès atomique pour plusieurs clients, donc tout ce que j'ai l'habitude d'utiliser un fichier texte ou une base de données intégrée pour maintenant je ne l'utilise Redis. par exemple, Pour obtenir un temps réel combinée de roulement journal des erreurs pour l'ensemble de nos services (qui a notoirement été une tâche difficile pour nous), est maintenant accomplie avec seulement un couple de lignes, juste avant l'attente de l'erreur pour un serveur Redis côté de la liste, puis coupe la liste de sorte que seules les 1000 derniers sont conservés, à l'e.g:
Je n'ai pas d'expériences., mais j'ai trouvé cette entrée de blog très intéressant.
Je trouve l'effort de logiciel de cartographie des objets du domaine (par exemple, aSalesOrder, aCustomer...) à deux dimensions de base de données relationnelle (lignes et colonnes) prend beaucoup de code pour enregistrer/mettre à jour, puis de nouveau à instancier un objet de domaine instance à partir de plusieurs tables. Pour ne pas mentionner la performance succès d'avoir tous ces jointures, toutes ces lectures... juste pour afficher/manipuler un objet de domaine comme un ordre de vente ou d'enregistrement de client.
Nous sommes passés à l'Objet de Base de données Systèmes de Gestion (ODBMS). Ils sont au-delà des capacités de la noSQL systèmes énumérés. La pierre précieuse/S (pour Smalltalk) en est un exemple. Il y a d'autres ODBMS des solutions qui ont des pilotes pour de nombreux langages. Une clé de développeur, votre hiérarchie de classe est automatiquement votre schéma de base de données, sous-classes et de tous. Il suffit d'utiliser votre langage orienté objet pour en faire des objets persistants, à la base de données. ODBMS systèmes fournissent un niveau d'ACIDE intégrité de transaction, de sorte qu'il serait aussi travailler dans les systèmes financiers.
Je suis passé de MySQL(InnoDB) à cassandra pour un système M2M, qui, fondamentalement, enregistre le temps de la série de capteurs pour chaque appareil. Chaque donnée est indexé par (device_id,date) et le (device_id,type_of_sensor,date). La version de MySQL contenait 20 millions de lignes.
MySQL:
Cassandra:
Note: j'ai également utilisé elasticsearch (document orienté basée sur lucene) et je pense qu'il devrait être considéré comme une base de données NoSQL. Il est distribué, fiables et souvent rapide (certaines requêtes complexes peuvent effectuer très mal).
Je n'ai pas. Je voudrais utiliser un moyen simple et gratuit key-value store que je peux appeler dans le processus, mais une telle chose n'existe pas à ma connaissance sur la plate-forme Windows. Maintenant, j'utilise Sqlite, mais je voudrais utiliser quelque chose comme Tokyo Cabinet. BerkeleyDB a licence "questions".
Toutefois, si vous souhaitez utiliser le système d'exploitation Windows de votre choix de bases de données NoSQL est limitée. Et il n'y a pas toujours d'un C# fournisseur de
Je l'ai fait essayer MongoDB et c'était 40 fois plus rapide que Sqlite, alors peut-être que je devrais l'utiliser. Mais j'ai encore de l'espoir pour un simple dans le processus de solution.
J'ai utilisé redis pour stocker les messages de journalisation à travers les machines. Il a été très facile à mettre en œuvre, et très utile. Redis vraiment roches
Nous avons remplacé une base de données postgres avec un CouchDB document de base de données parce que de ne pas avoir de schéma a été un grand avantage pour nous. Chaque document dispose d'un nombre variable d'index utilisé pour accéder à ce document.
J'ai utilisé Couchbase, dans le passé, et nous avons rencontré le rééquilibrage des problèmes et d'autres problèmes. Actuellement, je suis en utilisant le Redis dans plusieurs projets de production. Je suis en utilisant redislabs.com qui est un service géré pour le Redis qui prend soin d'étendre votre Redis clusters. J'ai publié une vidéo sur la persistance d'objet sur mon blog à l' http://thomasjaeger.wordpress.com qui montre comment utiliser Redis dans un modèle de fournisseur et comment stocker vos objets C# dans le Redis. Prendre un coup d'oeil.
Je voudrais encourager tous ceux qui lisent ceci pour essayer de Couchbase une fois de plus, maintenant que la 3.0 est sorti de la porte. Il y a plus de 200 nouvelles fonctionnalités pour les débutants. La performance, la disponibilité, l'évolutivité et la facilité de gestion caractéristiques de Couchbase Server rend extrêmement flexible, hautement disponible de la base de données. L'INTERFACE de gestion est intégré et l'Api de découvrir automatiquement les nœuds de cluster, donc il n'est pas nécessaire pour un équilibreur de charge de l'application de la DB.
Alors que nous n'avons pas un service géré à ce moment, vous pouvez exécuter couchbase sur des choses comme AWS, RedHat Engrenages, Cloudera, Rackspace, les Conteneurs Docker comme CloudSoft, et beaucoup plus. Concernant le rééquilibrage cela dépend de ce que précisément vous faites allusion, mais Couchbase ne pas rééquilibrer automatiquement après une panne de nœud, comme prévu, mais un administrateur pourrait le programme d'installation automatique de basculement pour la première défaillance d'un nœud et de l'utilisation de notre Api, vous pouvez également accéder à la réplique vbuckets pour la lecture avant de les rendre active ou à l'aide de la RestAPI vous pouvez appliquer un basculement par un outil de surveillance. C'est un cas particulier mais il est possible de faire.
Nous ont tendance à ne pas rééquilibrer dans pratiquement n'importe quel mode, sauf si le nœud est complètement hors ligne et ne jamais revenir, ou un nouveau nœud est prêt à être équilibrée automatiquement. Voici un couple de guides pour aider quiconque est intéressé à voir ce que l'une des plus performantes, les bases de données NoSQL est tout au sujet.
Enfin, je vous encourage à consulter N1QL pour les requêtes distribuées:
Merci pour la lecture et laissez moi ou d'autres savoir si vous avez besoin de plus d'aide!
Austin
J'ai utilisé Vertica dans le passé.Il s'appuie sur des colonnes de compression & accélère la lecture du disque et réduit les besoins de stockage pour profiter au maximum de votre matériel. Plus rapide des charges de données et accroître la concurrence vous permet de purger les données d'analyse pour plusieurs utilisateurs avec un minimum de latence.
Nous avons eu l'interrogation de la base de données Oracle ayant milliards de documents & la performance a été très sous-optimale. Les requêtes de 8 à 12 ans, et même après l'optimisation des SSD. Par conséquent, nous avons ressenti le besoin d'utiliser une lecture rapide optimisé, de l'analyse orientée base de données. Avec Vertica groupes derrière la maigre couche de service, nous pourrions exécuter des Api avec des sous-deuxième performance.
Vertica stocke les données dans des projections dans un format qui permet d'optimiser l'exécution de la requête. Semblables à des vues matérialisées, les projections de stocker des ensembles de résultats sur SSD OU disque plutôt que de les calculer à chaque fois qu'ils sont utilisés dans une requête.Les Projections de fournir les avantages suivants:
Vertica optimise la base de données en distribuant les données sur cluster à l'aide de la Segmentation.
morceau du processus de requête.
plan d'.
de sortie.
Pour plus d'informations, veuillez vous référer à la Vertica documentation @ https://www.vertica.com/knowledgebase/