gpt4 book ai didi

python - 如何高效的向 Redis 插入 Billion 数据?

转载 作者:IT王子 更新时间:2023-10-29 06:00:25 24 4
gpt4 key购买 nike

我有大约 20 亿个键值对,我想将它们高效地加载到 Redis 中。我目前正在使用 Python 并使用 Pipe,如 redis-py 记录的那样.我怎样才能加快以下方法的速度?

import redis

def load(pdt_dict):
"""
Load data into redis.

Parameters
----------
pdt_dict : Dict[str, str]
To be stored in Redis
"""
redIs = redis.Redis()
pipe = redIs.pipeline()
for key in pdt_dict.keys():
pipe.hmset(self.seller + ":" + str(key), pdt_dict[key])
pipe.execute()

最佳答案

关于问题和示例代码的几点说明。

  1. 管道不是 Elixir - 您需要在使用之前了解它的作用。流水线的作用是批量发送多个操作,它们来自服务器的响应也是如此。您获得的是每个操作的网络往返时间被批处理的网络往返时间所取代。但是无限大小的批处理确实会消耗资源——你需要保持它们的大小足够小才能有效。根据经验,我通常尝试将每个管道的目标定为 60KB,并且由于每个数据都不同,因此管道中的实际操作数量也不同。假设您的键及其值约为 1KB,您需要每 60 次左右的操作调用一次 pipeline.execute()

  2. 除非我严重误解,否则这段代码不应该运行。您正在使用 HMSET 就好像它是 SET 一样,因此您基本上缺少 Hashes 的 field->value 映射。哈希 (HMSET) 和字符串 (SET) 是不同的数据类型,因此应相应地使用。

  3. 似乎这个小循环负责整个“十亿数据”——如果是这样的话,运行代码的服务器不仅会疯狂交换,除非它有很多RAM 来保存字典,它也会非常低效(不管 Python 的速度如何)。您需要通过运行此过程的多个实例来并行化数据插入。

  4. 您是否远程连接到 Redis?如果是这样,网络可能会限制您的表现。

  5. 考虑您的 Redis 设置 - 假设它确实是一个瓶颈,也许可以调整/调整这些设置以获得更好的性能。

关于python - 如何高效的向 Redis 插入 Billion 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com