Le choix de MongoDb/CouchDb/RavenDb - les performances et l'évolutivité des conseils
Nous sommes à la recherche à un document db solution de stockage d'échouer sur le clustering, pour certains de lecture/écriture intensive de l'application.
Nous allons avoir une moyenne de 40K écritures simultanées par seconde, écrite à la db (avec des pics pouvant aller jusqu'à 70 000 en cours) - et autour de la quasi-similaire, nombre de lectures qui se passe.
Nous avons également besoin d'un mécanisme pour la db, pour les informer de la nouvelle des documents écrits (une sorte de déclencheur au niveau de db).
Ce sera une bonne option en termes de choix d'un document db et des capacités en matière de planification?
Mis à jour
Plus de détails sur l'attente.
- Sur une moyenne, nous nous attendons à 40,000 (40K) Nombre de plaquettes (nouveaux documents) par seconde à travers 3-4 bases de données de collections de documents.
- Le pic peut aller jusqu'à 120 000 (120K) Insère
- Les Inserts doivent être lisibles sur le champ, presque en temps réel
- Parallèlement à cela, nous attendons environ 5000 mises à jour ou suppressions par seconde
- Parallèlement à cela, nous nous attendons aussi à 500-600 requêtes simultanées de l'accès aux données. Ces requêtes et les plans d'exécution sont un peu connus, même si cela peut être mis à jour, comme, disons, une fois dans une semaine ou deux.
- Le système devrait soutenir le clustering avec basculement sur le côté stockage
- Un peu plus de détails pourraient vous être utiles. Faire les écritures doivent être lisibles tout de suite, ou est-ce OK si il y a un retard là? Quelle sont les lectures et les écritures? Comment sont les lectures et les écritures distribués à travers les données (par exemple, 20 000 nouveaux documents vs de 20 000 modifications à la même document)?
- Doit être lisible tout de suite. Le record de taille sera de l'ordre de 2K/d'enregistrement. De 20 000 frais insère par seconde - les Mises à jour sont très en moins par rapport à cela. Aussi, veuillez noter que le coup d'oeil est d'environ 70 000
- Mise à jour de la base de référence de l', veuillez voir ci-dessus
- permet de vérifier ce que cela va vous aider db-engines.com/en/system/MongoDB%3BRavenDB
- La caisse de la MongoDB -vs - RavenDB livre blanc ! ravendb.net/whitepapers/... RavenDB si de loin une meilleure option
Vous devez vous connecter pour publier un commentaire.
si "de 20 000 écritures simultanées" signifie insère ensuite, je voudrais aller CouchDB et utiliser "_changes" api pour les déclencheurs. Mais avec 20.000 écrit vous auriez besoin d'un stable de fragmentation aswell. Alors vous feriez mieux de prendre un coup d'oeil à bigcouch
Et si "20.000" écritures simultanées consistent en "la plupart" des mises à jour j'irais pour MongoDB pour sûr, depuis Sa "mise en place" est assez impressionnant. Mais alors vous devez gérer déclenche manuellement, mais en utilisant une autre collection à la mise en place d'un document général peut être une solution pratique. De nouveau être prudent au sujet de la fragmentation.
Enfin je pense que vous ne pouvez pas sélectionner une base de données avec seulement la concurrence, vous avez besoin de planifier à l'api (comment vous permettrait de récupérer les données), puis d'examiner des options en main.
Je recommanderais MongoDB. Mes exigences n'était pas presque aussi élevé que le vôtre, mais il était assez proche. En supposant que vous allez être en utilisant le C#, je vous recommande de le officiel MongoDB C# pilote et le InsertBatch méthode avec SafeMode allumé. Il va littéralement écrire des données rapidement votre système de fichiers peut gérer. Quelques mises en garde:
Cela étant dit, je recommande aussi de regarder dans RavenDB ainsi. Il prend en charge tout ce que vous voulez, mais pour la vie de moi, je ne pouvais pas le faire jouer n'importe où près de Mongo.
Le seul autre base de données qui est venu près de MongoDB a été Riak. Son défaut Bitcask backend est ridiculement rapide aussi longtemps que vous avez suffisamment de mémoire pour stocker les clés mais je me souviens qu'il ne prend pas en charge les déclencheurs.
Membase (et bientôt-à-être-publié Couchbase Server) permettra de gérer facilement vos besoins et vous fournir une évolutivité dynamique (à la volée ajouter ou supprimer des nœuds), la réplication avec basculement. Memcached couche de mise en cache sur le haut de la poignée facilement 200k ops/sec, et vous pouvez linéaire de l'échelle avec plusieurs nœuds à l'appui de l'obtention des données enregistrées sur le disque.
Nous avons quelques dernières repères montrant une latence extrêmement faible (ce qui équivaut approximativement à haut débit): http://10gigabitethernet.typepad.com/network_stack/2011/09/couchbase-goes-faster-with-openonload.html
Ne sais pas combien il est important pour vous d'avoir une prise en charge de l'Entreprise de produits de classe avec le service d'ingénierie et d'assurance qualité des ressources derrière elle, mais qui est aussi disponible.
Edit: j'ai Oublié de mentionner qu'il y a un déclencheur intégré interface déjà, et nous allons l'étendre encore plus loin, pour le suivi de données hits disque (persiste) ou est répliquée.
Perry
Riak avec Google LevelDB backend [voici un génial de référence de Google], compte tenu de suffisamment de mémoire cache et disques solides est très rapide. En fonction de la structure du document, et sa taille ( vous l'avez mentionné, 2 KO ), vous devrez à l'indice de référence des cours. [ Gardez à l'esprit, si vous êtes en mesure d'éclat de vos données d'affaires ( sage ), vous n'avez pas à maintenir 40K/s de débit sur un nœud unique ]
Un autre avantage avec LevelDB est la compression de données => stockage. Si le stockage n'est pas un problème, vous pouvez désactiver la compression, auquel cas LevelDB serait littéralement voler.
Riak secondaire indicies permet de vous rendre structures de données comme documenté que vous le souhaitez => vous index uniquement les champs que vous vous souciez de la recherche par.
Succès et indolore
Fail Over
est Riak deuxième nom. Il brille vraiment ici.Vous pouvez compter sur
pre-commit
etpost-commit hooks
dans Riak pour obtenir ce comportement, mais encore une fois, comme tous les déclencheurs, il est livré avec le prix => performance /facilité de maintenance.Riak écrit sur le disque (pas de async MongoDB surprises) =>
reliably readable
tout de suite. Dans le cas où vous avez besoin d'une meilleure cohérence, vous pouvez configurer Riak du quorum pour les inserts: par exemple, le nombre de nœuds de revenir en avant de l'insertion est considérée comme réussieEn général, si
fault tolerance
/concurrency
/fail over
/scalability
sont importants pour vous, j'irais avec les banques de données qui sont écrit en Erlang, depuis Erlang avec succès résout ces problèmes depuis de nombreuses années maintenant.