2010-09-20 2 views
5

Je pense qu'il y a des mois. J'ai trouvé un projet open source de google qui peut stocker des paires de valeur clés à haute performance. Mais j'ai oublié le nom. Quelqu'un pourrait-il me le dire? ou vous pouvez avoir d'autres suggestions pour moi? J'ai utilisé BerkerlyDB, mais j'ai trouvé que BerkerlyDb n'est pas assez rapide pour mon programme. Cependant, berkerylyDB est pratique à utiliser car il apparaît comme un jar lib jar, qui peut être intégré à mon programme de façon transparente. Mon programme est également écrit en Java.quel magasin de keyvalue a la meilleure exécution?

Répondre

4

Deux concurrents puissants dans la DHT (Distributed Hash Table) 'marché':

Here est une présentation sur Cassandra. Sur la diapositive 20, vous verrez des repères de vitesse - 0,12 ms/écriture
(Vous pouvez rechercher autour de la présentation entière, y compris Eric Evans parlant)

+0

Vous auriez besoin d'y accéder via la connexion réseau, n'est-ce pas? Est-ce que ce serait assez rapide? –

+0

Si vous les utilisez localement, vous n'avez pas besoin de connexion réseau. Et Cassandra écrit sont extrêmement rapides. – Bozho

+0

Merci. Je me demande à quelle vitesse "extrêmement rapide" est réellement pour un seul cas d'utilisation de machine/processus unique. Connaissez-vous des chiffres ou des résultats de référence? Est-ce que Cassandra et HBase sont optimisés pour ce cas, sont-ils égaux pour ce cas d'utilisation? D'après ce que j'ai lu, ils sont tous deux spécialement conçus pour être distribués. –

-1

Je pense que vous avez vu Guava ou les collections Google.

+0

Les collections google prennent-elles en charge la persistance des données sur le disque? ou juste garder en mémoire? – afancy

1
+0

Je pense que le projet voldemort vaut le coup d'oeil. Même si Redis répond à la question :) http://project-voldemort.com/ – Mobbit

+0

Vous auriez besoin d'accéder à Redis via la connexion réseau, n'est-ce pas? Est-ce que ce serait assez rapide? –

1

Peut-être que vous devriez décrire ce que vous avez besoin fonctionnalités. Si elle n'a pas besoin d'être distribuée (est-ce?) Alors j'essaierais d'utiliser le H2 Database. Pour ceux qui pensent que "cela ne peut pas être rapide parce qu'il utilise SQL", veuillez noter que lorsque vous utilisez une instruction préparée, l'analyse SQL n'est effectuée qu'une seule fois. Disclaimer: Je suis l'auteur principal de H2.

1

Beaucoup de réponses semblent supposer automatiquement le besoin de distribution; mais cela semble étrange si la question fait référence à BDB. Dans cet esprit, au-delà de Redis et H2 (qui sont tous les deux bons), il y a aussi Tokyo Cabinet à considérer, ce qui semble offrir des avantages par rapport à BDB. Et une autre possibilité plus récente est Krati.

2

Personne ne mentionne leveldb et pourtant ce poste est en haut quand vous recherchez "bon magasin de valeur de clé". Leveldb dans mon expérience est tout simplement génial. C'est si vite que je ne pouvais pas le croire. J'ai essayé pas mal de bases de données pour une tâche que je faisais. J'ai essayé:

  • fenêtres de stockage de table d'azur (taille chère, la valeur maximum 1 Mo et chaque taille de la propriété est au maximum de 64 Ko)
  • Redis (génial si vous avez autant de RAM que vous s'il vous plaît)
  • mongodb (impressionnant tant qu'il y a suffisamment de RAM, se brise après ce point)
  • sql server (cher, nécessite une maintenance, comme la reconstruction des index et finalement pas encore assez rapide)
  • sqlite (gratuit, mais pas aussi simple à utiliser comme leveldb et pas rapide)
  • leveldb. Si vous pouvez modéliser votre travail en lisant de gros morceaux consécutifs de données à travers un itérateur, vous obtiendrez une grande vitesse. L'écriture est également assez rapide. Combinez-le avec le disque SSD et vous l'aimerez.
+0

Curieux de savoir pourquoi vous mentionnez Azure Table Storage aussi cher? 100 millions de transactions coûtent environ 10 $ (avant rabais). Si vous chargez vos requêtes, cela compte comme une transaction. Vous pourriez en théorie écrire le numéro de sécurité sociale de tout le monde aux États-Unis et le relire (en utilisant le traitement par lots) pour moins de 1 dollar en transactions. Les coûts de stockage seraient à ce sujet aussi. –

+0

@BartCzernicki Je pense à deux raisons: 1) J'ai vraiment eu beaucoup de transactions (en partie augmenté en divisant les données en morceaux de moins de 1 Mo) et je n'ai pas utilisé de lots (ne me souviens pas pourquoi). 2) Depuis que j'ai utilisé le stockage de table, j'ai également hébergé sur des machines virtuelles azurées (de sorte que les données transitent via l'intranet local) et que si je me souviens bien, 86 $ par petite instance par mois. En tout cas c'est "cher" par rapport à d'autres options et peut-être pas si cher en général, surtout s'il est optimisé (comme les lots, etc.) – ren

Questions connexes