Quel est le magasin de valeurs-clés sans mémoire le plus rapide pour Node.js prenant en charge plusieurs processus?
J'ai besoin de stocker de simples paires chaîne/chaîne clé-valeur (pas des documents ou JSON, juste des chaînes).
Voici quelques exemples (il y en aurait des millions):
J'ai essayé:
Une solution de contournement pour LevelDB est multinivea , qui expose un seul processus LevelDB via HTTP.
Mais cela a bien sûr un prix; J'ai besoin de quelque chose de rapide.
Existe-t-il un magasin de valeurs-clés qui:
Je me soucie seulement de la lecture. Une lecture multi-processus rapide est nécessaire, mais pas une écriture.
Je suis satisfait de la vitesse actuelle de LevelDB, mais pas du fait qu'il s'agit d'un processus unique.
Détails supplémentaires:
Je suggère de jeter un œil à LMDB (qui est le moteur le plus efficace pour OpenLDAP, et utilisé dans un certain nombre d'autres projets open source).
LMDB est un magasin de clés/valeurs intégré, avec une API de type Berkeley-DB ou LevelDB, n'a pas à tout stocker en mémoire et peut prendre en charge l'accès à partir de plusieurs processus. Il existe des liaisons Node.js:
Vous pouvez essayer ssdb
, une base de données compatible avec le protocole redis construite sur leveldb.
https://github.com/ideawu/ssdb
Vous pouvez utiliser le node-redis
client, bien que certaines commandes puissent varier.
repères :
Redis (100.000x)
13,540 op/s ⨠ set small
13,289 op/s ⨠ set medium
13,279 op/s ⨠ set large
13,651 op/s ⨠ get large
13,681 op/s ⨠ get medium
14,428 op/s ⨠ get small
SSDB (100.000x)
12,252 op/s ⨠ set small
11,824 op/s ⨠ set medium
11,720 op/s ⨠ set large
13,810 op/s ⨠ get large
13,593 op/s ⨠ get medium
12,696 op/s ⨠ get small
lmdb (100.000x)
4,616 op/s ⨠ set small
11,104 op/s ⨠ set medium
17,283 op/s ⨠ set large
13,778 op/s ⨠ get large
16,002 op/s ⨠ get medium
50,562 op/s ⨠ get small
multilevel (100.000x)
6,124 op/s ⨠ set small
5,900 op/s ⨠ set medium
5,944 op/s ⨠ set large
6,215 op/s ⨠ get large
6,125 op/s ⨠ get medium
6,310 op/s ⨠ get small
Comme vous pouvez le voir, ssdb
est presque aussi rapide que redis, et il est conçu pour un stockage persistant. lmdb
@ didier-spezia mentionné est ultra rapide pour obtenir de petites données, mais en définir un est lent.
Il y a RocksDB de FaceBook qui est censé être rapide (en particulier sur le stockage SSD), et il y en a aussi d'autres comme LMDB (déjà mentionné) et WiredTiger
Vous avez mentionné Redis - Si vous souhaitez utiliser l'API Redis mais avoir l'une des bases de données de clés/valeurs ci-dessus comme stockage au lieu de votre RAM, il y a deux projets que je connais (bien que je ne les ai pas testés): - LedisDB (écrit en Go) et ardb (écrit en C++).
J'ai récemment commencé à tester ce qui semble être une bibliothèque de base de données de valeurs clés très prometteuse mais encore moins connue (mais je suis sûr que cela va changer) nommée CuttDB . Il a des performances très rapides et est conçu pour gérer de grandes quantités de données sur le disque dur. Il comprend même une interface serveur Memcached.
Le problème que vous allez rencontrer est que "la vitesse de l'éclair" et le disque ne se mélangent pas, surtout si vous avez des lectures à accès aléatoire comme vous le faites dans un système de valeurs-clés. Vous devez mettre autant de données en mémoire que possible, car la lecture depuis la mémoire est beaucoup plus rapide que la lecture depuis le disque.
Est-ce la raison pour laquelle vous souhaitez minimiser la mémoire car ce sera une base de données intégrée? Si oui, vous voudrez peut-être regarder Empress - http://www.empress.com . L'avez utilisé dans quelques projets et vous pouvez configurer la quantité chargée. Cependant, il a les frais généraux d'un SGBDR, donc pas sûr qu'il sera aussi léger que vous le souhaitez.
Vous pouvez également envisager MySQL avec l'addon Memcache. Cela vous permet d'utiliser MySQL comme magasin de valeurs clés. Beaucoup plus rapide que MySQL standard car vous ignorez le traitement de la couche SQL. De plus, avec MySQL, vous pouvez tourner les boutons pour jouer avec la quantité de mémoire utilisée.
Firebird est une autre base de données à faible utilisation de mémoire - http://www.firebirdnews.org/docs/fb2min.html .
Quoi qu'il en soit, j'espère que cela vous aidera. Sans une explication plus approfondie de vos besoins (est-ce intégré, pourquoi le besoin d'économiser de la mémoire et si la mémoire est précieuse qu'est-ce que vous considérez comme une faible consommation de mémoire, avez-vous besoin d'acide, de redondance, que considérez-vous comme l'éclair rapide, etc.) difficile de fournir plus d'une analyse.
Pourquoi n'utilisez-vous pas MySQL (ou MariaDB) avec la réplication maître-esclave. En fonction de vos besoins. L'architecture maître-esclave de MySql est adaptée à vous.
Fondamentalement, NoSQL a besoin de beaucoup de serveurs. Par exemple, le paramètre minimal de MongoDB nécessite trois serveurs, HBase a besoin de quatre serveurs.
Dans ce point de vue, si vous avez besoin de plus de lisibilité, ajoutez un nouveau serveur esclave sur l'architecture mysql.
Nous supposons que les performances de lecture de mysql sont de 2k tps. Ensuite, les quatre nœuds des performances de lecture de mysql sont de 8k tps.
Cela dépend du résultat de votre test et de l'utilisation du service (rapport lecture/écriture).
vérifier le lien ci-dessous, c'est "Marco Cecconi - L'architecture de StackOverflow". http://www.youtube.com/watch?v=t6kM2EM6so4