web-dev-qa-db-fra.com

Quel magasin de clés / valeur est le plus prometteur / stable?

Je cherche à commencer à utiliser un magasin de clés/valeurs pour certains projets parallèles (principalement comme expérience d'apprentissage), mais beaucoup sont apparus récemment que je n'ai aucune idée par où commencer. Juste une liste de mémoire, je peux penser à:

  1. CouchDB
  2. MongoDB
  3. Riak
  4. Redis
  5. Cabinet de Tokyo
  6. Berkeley DB
  7. Cassandra
  8. MemcacheDB

Et je suis sûr qu'il y en a d'autres qui ont glissé dans mes efforts de recherche. Avec toutes les informations disponibles, il est difficile de trouver des comparaisons solides entre tous les concurrents. Mes critères et questions sont:

  1. (Le plus important) Lequel recommandez-vous, et pourquoi ?
  2. Lequel est le plus rapide?
  3. Lequel est le plus stable?
  4. Lequel est le plus facile à configurer et à installer?
  5. Lesquels ont des liaisons pour Python et/ou Ruby?

Modifier:
Jusqu'à présent, il semble que Redis soit la meilleure solution, mais c'est uniquement parce que j'ai obtenu une réponse solide (de ardsrk). Je cherche plus de réponses comme les siennes, car elles m'orientent vers des informations quantitatives utiles. Quel magasin de valeurs-clés utilisez-vous vous et pourquoi?

Modifier 2:
Si quelqu'un a de l'expérience avec CouchDB, Riak ou MongoDB, j'aimerais entendre vos expériences avec eux (et plus encore si vous pouvez offrir une analyse comparative de plusieurs d'entre eux)

60
Mike Trpcic

Que recommandez-vous et pourquoi?

Je recommande Redis. Pourquoi? Continuer la lecture!!

Lequel est le plus rapide?

Je ne peux pas dire si c'est le plus rapide. Mais Redis est rapide . C'est rapide car il contient toutes les données en RAM. Récemment, une fonction de mémoire virtuelle a été ajoutée, mais toutes les clés restent dans la mémoire principale, seules les valeurs rarement utilisées étant échangées sur le disque.

Lequel est le plus stable?

Encore une fois, puisque je n'ai aucune expérience directe avec les autres magasins de valeurs-clés, je ne peux pas comparer. Cependant, Redis est utilisé dans la production par de nombreuses applications Web telles que GitHub et Instagram , entre autres.

Lequel est le plus facile à configurer et à installer?

Redis est assez facile à installer. Prenez le source et sur une boîte Linux exécutez make install. Cela donne redis-server binaire que vous pourriez le mettre sur votre chemin et le démarrer.

redis-server se lie au port 6379 par défaut. Jettes un coup d'oeil à redis.conf fourni avec la source pour plus d'options de configuration et d'installation.

Lesquels ont des liaisons pour Python et/ou Ruby?

Redis a un excellent support Ruby et Python .

En réponse à commentaire de Xorlev ci-dessous: Memcached n'est qu'un simple magasin de valeurs-clés. Redis prend en charge les types de données complexes comme les listes, les ensembles et les ensembles triés et fournit en même temps une interface simple à ces types de données.

Il y a aussi make 32bit qui fait que tous les pointeurs n'ont qu'une taille de 32 bits, même sur les machines 64 bits. Cela économise une mémoire considérable sur les machines avec moins de 4 Go de RAM.

26
ardsrk

Vous devez comprendre en quoi consiste le phénomène NoSQL moderne.
Il ne s'agit pas de stockage de valeurs-clés. Ils sont disponibles depuis des décennies (BerkeleyDB par exemple). Pourquoi tout ce tapage maintenant?

Il ne s'agit pas de schémas fantaisistes orientés document ou objet et de surmonter le "décalage d'impédance". Les partisans de ces fonctionnalités les vantent depuis des années et ils ne sont arrivés nulle part.

Il s'agit simplement de résoudre 3 problèmes techniques: le basculement, le sharding et la réplication automatiques (pour les mainteneurs) et transparents (pour les développeurs d'applications). Vous devez donc ignorer tous les produits à la mode qui ne livrent pas sur ce front. Ceux-ci incluent Redis, MongoDB, CouchDB etc. Et se concentrent sur des solutions vraiment distribuées comme cassandra, riak etc.

Sinon, vous perdrez tout ce que SQL vous offre (requêtes ad hoc, Crystal Reports pour votre patron, outils et bibliothèques tiers) et ne recevrez rien en retour.

24
Vagif Verdi

Au PyCon de cette année, Jeremy Edberg de Reddit a donné une conférence:

http://pycon.blip.tv/file/3257303/

Il a dit que Reddit utilise PostGres comme magasin de valeurs-clés, probablement avec une simple table à 2 colonnes; selon son discours, il avait été comparé plus rapidement que tout autre magasin de valeurs-clés qu'ils avaient essayé. Et, bien sûr, c'est très mature.

En fin de compte, OverClocked a raison; votre cas d'utilisation détermine le meilleur magasin. Mais les RDMBS sont depuis longtemps (ab) utilisés comme magasins de valeurs-clés, et ils peuvent aussi être très rapides.

8
AdamKG

J'ai joué avec MongoDB et il a une chose qui le rend parfait pour mon application, la possibilité de stocker directement des cartes/listes complexes dans la base de données. J'ai une grande carte où chaque valeur est une liste et je n'ai rien à faire de spécial juste pour écrire et récupérer cela sans connaître toutes les différentes clés et valeurs de liste. Je ne connais pas grand-chose aux autres options, mais la vitesse et cette capacité rendent Mongo parfait pour mon application. De plus, le pilote Java est très simple à utiliser.

7
MattGrommes

Ils ont tous des caractéristiques différentes. Et n'oubliez pas Project Voldemort qui est réellement utilisé/testé par LinkedIn dans leur production avant chaque version.

C'est difficile à comparer. Vous devez vous demander ce dont vous avez besoin: par ex. voulez-vous le partitionnement? si c'est le cas, certains d'entre eux, comme CouchDB, ne le prendront pas en charge. Voulez-vous un codage d'effacement? Alors la plupart d'entre eux n'en ont pas. Etc.

Berkeley DB est un moteur de stockage basique très basique, qui peut peut-être être excusé de cette discussion. Plusieurs systèmes de valeurs-clés sont construits par-dessus, pour fournir des fonctionnalités supplémentaires telles que la réplication, le versionnement, le codage, etc.

De plus, de quoi votre application a-t-elle besoin? Plusieurs des solutions contiennent une complexité qui peut ne pas être nécessaire. Par exemple. si vous ne stockez que des données statiques qui ne changeront pas, vous pouvez les stocker sous le hachage de contenu SHA-1 des données (c'est-à-dire utiliser le hachage de contenu comme clé). Dans ce cas, vous n'avez pas à vous soucier de la fraîcheur, de la synchronisation, du versionnement et de nombreuses complexités peuvent être supprimées.

7
OverClocked

Une distinction que vous devez faire est à quoi allez-vous utiliser la base de données? Ne sautez pas à bord simplement parce que c'est à la mode. Avez-vous besoin d'un magasin de valeur clé? ou avez-vous besoin d'un magasin basé sur des documents? Quelle est votre exigence d'espace mémoire? l'exécuter sur un petit VM ou un autre?

Je recommande d'abord de répertorier vos besoins, puis de voir lesquels chevauchent vos besoins.

Cela dit, j'ai utilisé CouchDB/MongoDB et je préfère utiliser MongoDB pour sa facilité d'installation et sa meilleure transition à partir des requêtes de style mysql. J'ai choisi mongodb plutôt que sql en raison de schémas dynamiques (pas de fichiers de migration!) Et d'une meilleure modélisation des données (tableaux, hachages). Je n'ai pas évalué sur la base de l'évolutivité.

MongoMapper est un excellent mappeur orm MongoDB pour Ruby et il y a déjà un Rails 3 fork).

J'ai énuméré plus de détails sur les raisons pour lesquelles j'ai préféré mongodb dans mes diapositives scribd http://tommy.chheng.com/index.php/2010/02/mongodb-for-natural-development/

6
tommy chheng

Je remarque à quel point tout le monde confond Memcached avec memcachedb. Ce sont deux systèmes différents. L'op a posé des questions sur memcachedb.

memcached est un stockage en mémoire. memcachedb utilise Berkeley DB comme magasin de données.

6
drr

Je n'ai qu'une expérience avec Berkeley DB, donc je mentionnerai ce que j'aime à ce sujet.

  • C'est rapide
  • Il est très mature et stable
  • Il a une documentation exceptionnelle
  • Il a des liaisons C, C++, Java et C # hors de la boîte. D'autres liaisons linguistiques sont disponibles. Je crois que Python est livré avec des liaisons dans le cadre de ses "batteries".

Le seul inconvénient que j'ai rencontré est que les liaisons C # sont nouvelles et ne semblent pas prendre en charge toutes les fonctionnalités.

5
Ferruccio

Il y a aussi zodb.

4
mikerobi

Quel magasin de valeur clé est le plus prometteur/stable?

magasin G-WAN KV semble plutôt prometteur :

DB engine            Traversal
-----------          ----------------------------
SQLite               0.261 ms  (b-tree)
Tokyo-Cabinet (TC)   4.188 ms  (hash table)
TC-FIXED             0.103 ms  (fixed-size array)
G-WAN KV             0.010 ms  (unamed)

En outre, il est utilisé en interne par le serveur Web G-WAN, connu pour ses performances de concurrence élevées (c'est pour la stabilité question).

4
Bert

J'aime vraiment memcached personnellement.

Je l'utilise sur quelques sites et c'est simple, rapide et facile. C'était vraiment incroyablement simple à utiliser, l'API est facile à utiliser. Il ne stocke rien sur le disque, donc le nom memcached, donc il est sorti si vous recherchez un moteur de stockage persistant.

Python a python-memcached.

Je n'ai pas utilisé le client Ruby, mais une recherche rapide sur Google révèle RMemCache

Si vous avez juste besoin d'un moteur de mise en cache, memcached est le chemin à parcourir. Il est développé, stable et saigne rapidement. Il y a une raison pour laquelle LiveJournal l'a fait et Facebook l'a développé. Il est utilisé sur certains des plus grands sites du monde. Il évolue extrêmement bien.

3
Xorlev

Cassandra semble être populaire.

Cassandra est utilisée par Digg, Facebook, Twitter, Reddit, Rackspace, Cloudkick, Cisco, SimpleGeo, Ooyala, OpenX et d'autres sociétés qui disposent de grands ensembles de données actifs. Le plus grand cluster de production compte plus de 100 TB de données dans plus de 150 machines.

2
yfeldblum

Comme l'ont dit les autres, cela dépend toujours de vos besoins. Je préfère par exemple ce qui convient le mieux à mes applications.

J'ai d'abord utilisé memcached pour avoir un accès rapide en lecture/écriture. Comme Java API j'ai utilisé SpyMemcached, ce qui est livré avec une interface très simple que vous pouvez utiliser pour écrire et lire des données. En raison de fuites de mémoire (plus de RAM), je devais en chercher un autre solution, je n'ai pas non plus pu évoluer correctement, simplement augmenter la mémoire pour un seul processus ne semblait pas être une bonne réussite.

Après un examen, j'ai vu couchbase, il est livré avec la réplication, le clustering, le basculement automatique et une édition communautaire (MS Windows, MacOs, Linux). Et la meilleure chose pour moi était que le client Java de celui-ci implémente également SpyMemcached, donc je n'avais presque rien d'autre à faire pour configurer le serveur et utiliser couchbase au lieu de memcached comme magasin de données. Avantage? Sûr , mes données sont maintenant persistantes, répliquées et indexées. Il est livré avec une console Web pour écrire des fonctions de réduction de carte pour les vues de documents dans erlang.

Il prend en charge Python, Ruby, .Net et plus encore, une configuration facile via la console Web et les outils client. Il fonctionne de manière stable. Avec quelques tests, j'ai pu écrire environ 10k par seconde pour des enregistrements longs de 200 à 400 octets. Les performances de lecture étaient cependant bien plus élevées (toutes deux testées localement). Amusez-vous bien à prendre votre décision.

1
Alex M

Juste pour compléter la liste: il y a aussi Dreamcache. Il est compatible avec Memcached (en termes de protocole, vous pouvez donc utiliser n'importe quelle bibliothèque cliente écrite pour Memcached), c'est juste plus rapide.

1
grokk

Avoir seulement de l'expérience avec mongoDB, memchache et redis. Voici un comparaison entre eux et couchDB.

Semble mongoDB est le plus populaire. Il prend en charge le partitionnement et la réplication, finalement cohérent, a un bon support dans Ruby (mongoid). Il a également un ensemble de fonctionnalités plus riche que les deux autres. Tous les mongo, redis et memchache peuvent stocker la clé -valeur en mémoire, mais redis semble être beaucoup plus rapide, selon cet article , redis est 2x en écriture, 3x en lecture plus rapide que mongo. Il a des structures de données mieux conçues et plus "légères".

Je dirais qu'ils ont des usages différents, mongoDB est probablement bon pour le grand ensemble de données et le stockage de documents tandis que memchache et redis sont meilleurs pour stocker des caches ou des journaux.

1
Bruce Xinda Lin