2011-09-21 3 views
16

J'essaie de charger un gros morceau de données dans Redis aussi vite que possible.Acquisition en vrac dans Redis

Mes données ressemble:

771240491921 SOME;STRING;ABOUT;THIS;LENGTH 
345928354912 SOME;STRING;ABOUT;THIS;LENGTH 

Il y a un ~ 12 nombre de chiffres sur la gauche et une chaîne de longueur variable à droite. La clé va être le nombre sur la gauche et les données vont être la chaîne sur la droite.

Dans mon instance Redis que je viens d'installer immédiatement et avec un fichier texte brut non compressé avec ces données, je peux obtenir environ un million d'enregistrements par minute. Je dois faire environ 45 millions, ce qui prendrait environ 45 minutes. 45 minutes est trop long.

Existe-t-il des ajustements de performance standard pour effectuer ce type d'optimisation? Aurais-je de meilleures performances en partageant des instances distinctes?

Répondre

26

Le moyen le plus rapide de le faire est le suivant: générer le protocole Redis à partir de ces données. La documentation pour générer le protocole Redis est sur le site Redis.io, c'est un protocole trivial. Une fois que vous avez cela, appelez-le appendonly.log et démarrez redis en mode append only.

Vous pouvez même faire une commande FLUSHALL et enfin pousser les données dans votre serveur avec netcat, en redirigeant la sortie vers/dev/null.

Ce sera super rapide, il n'y a pas de RTT à attendre, c'est juste un chargement en masse de données.

Moins de manière hackish, il suffit d'insérer des choses 1000 par temps en utilisant pipelining. Il est presque aussi rapide que de générer le protocole, mais beaucoup plus propre :)

+0

Qu'utilisiez-vous actuellement pour insérer des données dans Redis? – antirez

+0

Merci! Génial pour obtenir une réponse directement de vous :) –

+0

J'ai été ingérer avec l'interface cli en créant un fichier qui est des commandes cli, comme: 'set 771240491921 QUELQUE; STRING; À PROPOS; THIS; LENGTH', puis le rediriger vers redis-cli –

2

J'aime ce que Salvadore a proposé, mais ici vous êtes un moyen très clair - générer des flux pour cli, par exemple.

SET xxx yyy 
SET xxx yyy 
SET xxx yyy 

tirez-le dans cli sur le serveur près de chez vous. Ensuite, sauvegardez, fermez et déplacez le fichier de données sur le serveur de destination.

+0

J'aime vraiment la simplicité de cette idée. Merci! –