web-dev-qa-db-fra.com

Redis, CouchDB ou Cassandra?

Quelles sont les forces et les faiblesses des différentes bases de données NoSQL disponibles?

En particulier, il semble que Redis soit faible lorsqu'il s'agit de répartir la charge d'écriture sur plusieurs serveurs. Est-ce le cas? Est-ce un gros problème? Quelle doit être la taille d'un service pour se développer avant que cela ne soit un problème important?

41
nornagon

Les forces et les faiblesses des bases de données NoSQL (et également des bases de données SQL) dépendent fortement de votre cas d'utilisation. Pour les très grands projets, la performance est reine; mais pour les nouveaux projets ou les projets où le temps et l'argent sont limités, la simplicité et le délai de commercialisation sont probablement les plus importants. Pour vous enseigner (élargir votre perspective, devenir un meilleur programmeur plus précieux), la chose la plus importante est peut-être des concepts fondamentaux simples et solides.

Quel genre de projet avez-vous en tête?

Quelques forces et faiblesses, du haut de ma tête:

  • Redis
    • Très simple valeur-clé "serveur de variables globales"
    • Système de requête très simple (certains diraient "inexistant")
    • Facilement le plus rapide de cette liste
    • Transactions
    • L'ensemble de données doit tenir en mémoire
    • Regroupement immature, avec un avenir incertain (je suis sûr que ce sera génial, mais ce n'est pas encore décidé.)
  • Cassandra
    • Sans doute l'élan le plus communautaire des bases de données de type BigTable
    • Probablement la plus simple de cette liste à gérer dans les grands clusters/en croissance
    • Prise en charge de la carte/réduire, bon pour l'analyse, l'entreposage de données
    • Réplication MUlti-datacenter
    • Cohérence/disponibilité réglable
    • Pas de point de défaillance unique
    • Vous devez savoir quelles requêtes vous exécuterez au début du projet, pour préparer la forme des données et les index
  • CouchDB
    • De loin la meilleure prise en charge de synchronisation (réplication), prenant en charge les architectures maître/esclave, maître/maître et plus exotiques
    • Protocole HTTP, les navigateurs/applications peuvent interagir directement ou partiellement avec la base de données. (La synchronisation se fait également via HTTP)
    • Après une brève courbe d'apprentissage, système de requête assez sophistiqué utilisant Javascript et mapper/réduire
    • Le fonctionnement en cluster (pas de SPOF, cohérence/disponibilité ajustable) est actuellement un fork important (BigCouch). Il fusionnera probablement dans Couch mais il n'y a pas de feuille de route.
    • De même, le clustering et le multi-datacenter sont théoriquement possibles (la chose "exotique" que j'ai mentionnée) mais vous devez écrire tout cet outillage vous-même à ce moment.
    • Ajouter uniquement le format de fichier (bases de données et index) consomme le disque étonnamment rapidement, et vous devez exécuter manuellement le compactage (passer l'aspirateur) qui crée une copie complète de tous les enregistrements de la base de données. La même chose est requise pour chaque fichier d'index. Encore une fois, vous devez être votre propre outilleur.
80
JasonSmith

Jetez un oeil à http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis Il fait un bon travail en résumant pourquoi vous utiliseriez l'un sur l'autre.

32
webXL