目前我正在使用下面的python代码将大量数据摄取到redis中。它能够每50秒插入10000条记录(这不是很快),但是如果我为两个不同的数据集并行运行这个函数,插入10000条记录几乎需要4分钟。
目前redis安装在服务器上,我正在本地机器上部署这个python脚本来执行这个脚本,因为在本地机器上执行这个脚本会比较慢,这意味着在服务器上部署这个脚本会提高速度。
另外,你能让我知道是加载数据到redis的方法是好的还是有更好的方法插入到redis巨大的数据。
在下面的函数中。批量大小配置为10000(即每10000条记录调用pipeline.execute)
def load_hashmap(data, client, keycolumn, batchsize):
try:
pipe = client.pipeline(transaction=False)
n = 0
for row in data:
pipe.hmset(row.get(keycolumn), row)
n = n + 1
if len(data) < batchsize and n == len(data):
pipe.execute()
print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))
if (n % batchsize) == 0:
pipe.execute()
print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))
pipe = client.pipeline()
if len(data) > batchsize and (n % batchsize) != 0:
pipe.execute()
print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))
except Exception as e:
raise Exception(str(e))
1条答案
按热度按时间j0pj023g1#
首先,
可以使用hmset(或hset)myhash field1“hello”field2“world”
一次插入多个键/值。所以不需要管道。
您需要检查网络i/o使用情况,我敢打赌,在redis示例的同一网络中的计算机上运行脚本会有所帮助(网络i/o是最常见的redis性能瓶颈)