2011-09-21 9 views
16

できるだけ早くRedisに大量のデータを読み込もうとしています。左側〜12桁の数字と右側の可変長文字列がありRedisに一括取り込み

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

:よう

私のデータが見えます。キーは左の数字になり、データは右の文字列になります。

私のRedisインスタンスでは、このデータを使って圧縮されていないプレーンテキストファイルをインストールしたばかりで、1分間に約100万レコードを取得できます。私は約4500万回する必要があり、約45分かかります。 45分が長すぎます。

このタイプの最適化を行うための標準的な調整がいくつかありますか?個別のインスタンス間でシャーディングすることでパフォーマンスを向上できますか?

答えて

26

これを行う最も簡単な方法は次のとおりです。このデータからRedisプロトコルを生成します。 Redisプロトコルを生成するためのドキュメントは、Redis.ioサイトにあります。これは簡単なプロトコルです。いったんそれを持っていれば、それをappendonly.logと呼び、追加だけのモードでredisを開始します。

FLUSHALLコマンドを実行して、最後にnetcatを使用してサーバーにデータをプッシュし、出力を/ dev/nullにリダイレクトすることもできます。

これは超高速ですが、待機するRTTはなく、データの大量の読み込みです。

ハッキングの少ない方法です。 CLIのフィードを生成し、例えば - それは私がサルバドルが提案何好きですが、ここにあなたが1より非常に明確な方法でほぼ同じ速度プロトコルを生成するようだが、はるかにきれい:)

+0

現在Redisにデータを挿入するために使用しているものはありますか? – antirez

+0

ありがとう!あなたから直接答えを得るために素晴らしい: –

+0

私はcliコマンドであるファイルを作成することによってcliインタフェースを取り入れていました: 'set 771240491921 SOME; STRING; ABOUT; THIS; LENGTH'そしてそれをredis-cliに配管する –

2

SET xxx yyy 
SET xxx yyy 
SET xxx yyy 

あなたの近くのサーバにcliにパイプします。次に、データファイルを保存、シャットダウンして移動先のサーバーに移動します。

+0

私はこの考え方の単純さが本当に好きです。ありがとう! –

関連する問題