我将有一个生成 1 亿个唯一键的程序,每个键都有一个与之关联的值(最多 4 位)。然后我希望能够尽可能快地访问该数据,以便我可以查找一个键并获取它的值。理想情况下至少每秒一百万次。
假设计算能力正常,这可能吗?我只是将它创建为字典还是应该开始学习数据库等?
任何为我指明正确方向的事情都会有很大的帮助。
我将有一个生成 1 亿个唯一键的程序,每个键都有一个与之关联的值(最多 4 位)。然后我希望能够尽可能快地访问该数据,以便我可以查找一个键并获取它的值。理想情况下至少每秒一百万次。
假设计算能力正常,这可能吗?我只是将它创建为字典还是应该开始学习数据库等?
任何为我指明正确方向的事情都会有很大的帮助。
快速数学表明您不能在 32 位系统上的 Python 中在内存中执行此操作。如果您有 3 GB 的可用地址空间,那么10 8个密钥将为您提供每个密钥 30 个字节。
在 64 位系统上,键和值的开销至少会占用:
sys.getsizeof(0)
在我的 64 位系统上给出 28 个)所以我们的估计是它至少需要 7.2 GB 的内存。你可以做到,但你可能会得到不可接受的性能。我建议使用像京都内阁这样简单的东西。
我没有足够的内存来测试 100m,但我生成了 5000 万个项目 dict() 并在 0.25 秒内在我的笔记本上运行了 100 万次查找。你在球场上。
import time
d = dict((k,k) for k in range(5*10**7))
time.sleep(2) # let system settle
print('start')
start = time.time()
for i in range(10**6):
x = d[i]
print(time.time() - start)
给我
start
.25