【问题标题】:Storage capacity of dictionary and want to store huge data into dictionary in python字典的存储容量,想要在python中将大量数据存储到字典中
【发布时间】:2014-11-13 14:51:01
【问题描述】:

我想在 python 中将大量数据存储到字典中。海量数据可能在 21 GB 左右。我为此写了一个 sn-p。将 整数值 存储在字典中。

代码:

import timeit
import sys
dicts = {}
print "\n***Building dict..."
start = timeit.default_timer()
for j in range(0,5):
    for i in range(0,1000000):
        dicts[''+str(j)+str(i)] = i
        print str(i) + '-' + str(j)
        print "Size : ", sys.getsizeof(dicts)/1024/1024, " MB"
print "Total time of build dict", timeit.default_timer() - start 

在运行期间,当我达到 使用 **getsizeof(dicts)** 大约 1.2GB 的大小时,它无法将值存储在字典中,但是 没有显示任何错误。 字典是否具有一些存储数据的能力?

那么,问题是如何将大量数据存储到字典中?

注意:不需要将数据存储在文件或数据库中。因为我想快速检索键值对

【问题讨论】:

  • 您的系统目前有多少内存?
  • 您有 21GB 以上的内存吗?如果您要存储 21GB 的数据,则至少需要该内存量(加上 Python 的开销,不确定是多少,但可能也不少)...您可以 使用交换空间,但我怀疑这会比 SQL 数据库更快...您要解决什么问题?我怀疑这是您要解决的问题的错误解决方案。
  • 交换是最糟糕的选择,因为大多数数据库都带有这样的机制,可以更好地利用 IO 和 ram 来提供更好的性能。因此,您将需要 ram 来保留您想要的所有数据 + 更多用于索引 + 一些用于开销 + 更多用于其他正在运行的东西。
  • @ user2097159 : 我的机器上有 4GB 内存。
  • 由于您的机器中只有 4GB 的 RAM,因此您的 dict 只有大约 1.2GB 在操作系统之后其他进程和开销听起来都差不多,这并不奇怪。您不能在字典中存储比内存更多的数据,因此写入文件/数据库是您最好/唯一的选择

标签: python memory dictionary


【解决方案1】:

Python dict 的大小限制取决于操作系统提供的可用内存。问题在于,随着字典的增长(调整大小),它必须复制自身以重新分配键,因此当字典变得非常庞大时,此过程可能开始需要比实际可用更多的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-22
    • 2013-05-06
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多