Nous examinons une solution de stockage de DB DB avec l'échec sur la clustering, pour une application intensive de lecture/écriture.
Nous aurons une moyenne de 40 000 écritures simultanées par seconde écrites à la DB (avec le pic peut aller jusqu'à 70 000 pendant) - et peut avoir autour de presque similiar nombre de lectures.
Nous avons également besoin d'un mécanisme pour la DB pour en informer sur les enregistrements nouvellement écrits (une sorte de déclenchement au niveau de DB).
Quelle sera une bonne option en termes de choix approprié de DB DB et de planification de la capacité connexe?
mise à jour
Plus de détails sur l'attente.
si "20 000 écrires simultanément" signifie des insertions, j'irais pour Couchdb et j'utiliserais une API "_changes" pour les déclencheurs. Mais avec 20.000 écrit, vous auriez besoin d'un rayon stable ASWELL. Ensuite, vous feriez mieux de regarder BigCouch
Et si "20.000" Les écrires simultanés consistent à "principalement" mettre à jour pour Mongodb, car sa "mise à jour en place" est assez géniale. Mais vous devriez alors gérer les déclencheurs manuellement, mais utiliser une autre collection pour mettre à jour en place un document général peut être une solution pratique. Faites de nouveau attention à la fâche.
Enfin, je pense que vous ne pouvez pas sélectionner une base de données avec simplement une simultanéité, vous devez planifier l'API (comment récupérer des données) puis rechercher des options à la main.
Je recommanderais mongodb. Mes conditions n'étaient pas aussi élevées que la vôtre, mais c'était raisonnablement proche. En supposant que vous utilisiez C #, je recommande le pilote C # officiel MongoDB C # et le inserbatch Méthode avec Safemode activé. Il va littéralement écrire des données aussi rapidement que votre système de fichiers peut gérer. Quelques réserves:
Cela étant dit, je recommanderais également de regarder dans Ravendb. Il soutient tout ce que vous recherchez mais pour la vie de moi, je ne pouvais pas le faire jouer n'importe où près de Mongo.
La seule autre base de données proches de Mongodb était Riak . Son backend de bitcask par défaut est ridiculement rapide tant que vous avez suffisamment de mémoire pour stocker le clavier, mais que je le rappelle que cela ne prend pas en charge les déclencheurs.
Mémbase (et le serveur CouchBase Server publié de bientôt disponible) répondront facilement à vos besoins et fourniront une évolutivité dynamique (Ajout ou supprimer des nœuds), la réplication avec le basculement. La couche de mise en cache memmatique sur le dessus gérera facilement 200K ops/s, et vous pouvez réduire linéairement avec de multiples nœuds pour prendre en charge l'obtention des données persistantes sur le disque.
Nous avons des points de repère récents montrant une latence extrêmement faible (qui équivaut à peu près à un débit élevé): http://10gigabitethernet.typepad.com/network_stack/2011/09/couchbase-goes-faster-with-penonload. html
Je ne sais pas à quel point il est important que vous ayez un produit de classe d'entreprise soutenu avec des ressources d'ingénierie et d'assurance qualité derrière celle-ci, mais c'est également disponible.
EDIT: Vous avez oublié de mentionner qu'il existe déjà une interface de déclenchement intégrée et nous l'étends encore plus loin à suivre lorsque les données frappent le disque (persisté) ou sont répliquées.
Poiré
Riak avec le backend de niveaudb de Google [Voici un Benchmark génial de Google], étant donné suffisamment de cache et de disques solides est très rapide. Selon une structure du document, et sa taille (vous avez mentionné 2 Ko), vous devrez-vous comparer bien sûr. [N'oubliez pas que si vous êtes capable de fumer vos données (Business Wise), vous n'avez pas à gérer le débit 40K/S sur un seul noeud]
Un autre avantage avec levetdb est la compression de données => Stockage. Si le stockage n'est pas un problème, vous pouvez désactiver la compression, auquel cas SBIDDB volerait littéralement.
RIAK AVEC DES INDICIES SECONDAIRES Vous permet de vous apporter des structures de données telles que vous le souhaitez => Vous n'exposez que les champs que vous vous souciez de la recherche.
Succès et sans douleur Fail Over
est le deuxième nom de Riak. Cela brille vraiment ici.
Vous pouvez compter sur pre-commit
et post-commit hooks
À Riak pour atteindre ce comportement, mais à nouveau, comme tout déclenche, il vient avec le prix => performance/maintenabilité.
Riak écrit sur le disque (pas de surprises asynchrones mongodb) => reliably readable
tout de suite. Si vous auriez besoin d'une meilleure consistance, vous pouvez configurer le quorum de Riak pour les insertions: par exemple. combien de nœuds devraient revenir avant que l'insert soit traité comme réussi
En général, si fault tolerance
/concurrency
/fail over
/scalability
est important pour vous, j'irais avec les magasins de données écrits à Erlang, car Erlang résout avec succès ces problèmes pendant de nombreuses années.