1

我将有一个生成 1 亿个唯一键的程序,每个键都有一个与之关联的值(最多 4 位)。然后我希望能够尽可能快地访问该数据,以便我可以查找一个键并获取它的值。理想情况下至少每秒一百万次。

假设计算能力正常,这可能吗?我只是将它创建为字典还是应该开始学习数据库等?

任何为我指明正确方向的事情都会有很大的帮助。

4

2 回答 2

3

快速数学表明您不能在 32 位系统上的 Python 中在内存中执行此操作。如果您有 3 GB 的可用地址空间,那么10 8个密钥将为您提供每个密钥 30 个字节。

在 64 位系统上,键和值的开销至少会占用:

  • 桶中每个指针 8 个字节,键和值各一个指针,
  • 每个键和值可能有 28 个字节(sys.getsizeof(0)在我的 64 位系统上给出 28 个)

所以我们的估计是它至少需要 7.2 GB 的内存。你可以做到,但你可能会得到不可接受的性能。我建议使用像京都内阁这样简单的东西。

于 2013-03-26T02:42:28.097 回答
1

我没有足够的内存来测试 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
于 2013-03-26T04:55:35.937 回答