2011-09-21 54 views
16

我试图尽快将大量数据加载到Redis中。批量摄入Redis

我的数据是这样的:

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

有左边一〜12位数字,右边一个可变长度的字符串。关键是左边的数字,数据将成为右边的字符串。

在我刚刚安装的Redis实例中,使用这个数据的未压缩的纯文本文件,我可以在一分钟内获得大约一百万条记录。我需要做大约4500万,这将需要大约45分钟。 45分钟太长。

是否有一些标准的性能调整存在让我做这种类型的优化?通过在不同的实例中分片可以获得更好的性能吗?

回答

26

执行此操作的最快方法如下:从此数据中生成Redis协议。生成Redis协议的文档位于Redis.io站点上,它是一个简单的协议。一旦你有了,就把它叫做appendonly.log,然后以追加模式启动redis。

甚至可以执行FLUSHALL命令,最后将数据用netcat推送到服务器,将输出重定向到/ dev/null。

这将是超快的,没有RTT等待,它只是一个批量的数据加载。

不太冒昧的做法,只需在每次使用流水线插入东西1000。 它几乎与生成协议一样快,但更加干净:)

+0

顺便说一句,你目前使用什么插入数据到Redis? – antirez

+0

谢谢!真棒直接从你得到一个答案:) –

+0

我通过创建一个cli命令文件,例如:set 771240491921 SOME; STRING; ABOUT; THIS; LENGTH',然后将它传输到redis-cli –

2

我喜欢萨尔瓦多提出的内容,但在这里您有一种更清晰的方式 - 生成cli的feed,

SET xxx yyy 
SET xxx yyy 
SET xxx yyy 

将其管理到靠近你的服务器上。然后,保存,关闭并将数据文件移动到目标服务器。

+0

我真的很喜欢这个想法的简单性。谢谢! –