gpt4 book ai didi

python - 如何存储和查询 5000 万个简单的 Python 字典?

转载 作者:行者123 更新时间:2023-11-28 22:05:46 25 4
gpt4 key购买 nike

问题

每个字典都有一个唯一的数字 id 字段,但其余部分是可变的(尽管都是文本或数字值)。一些简单的查询功能会很好,例如get where name contains 'abc'where a < 123 .

我有哪些选择?

设置

  • python 2.6
  • 32 位 Ubuntu 服务器 256MB
  • 单机
  • 无交换

示例字典:

{'id': 3823942, 'name': u'example', 'unknown_variable_key': u'foo'}

注意事项

不能使用 MongoDB:32 位 MongoDB 进程被限制为大约 2.5 GB 的数据
不能使用 Redis,因为它需要 RAM 中的整个数据集

最佳答案

您可以尝试使用 CouchDB。它是一个面向文档的数据库。有存储数百万和更多文档的示例(例如 here)。

有一个good guide到 CouchDB。

您的数字 ID 字段可以用作文档 ID。

您可以尝试编写一个使用 bulk APIs 填充数据库的 python 脚本(以便更快地插入该数量的对象)

View 可用于进行各种查询。

[编辑]

我对 CouchDB 的内存消耗很好奇,做了一个简单的实验。

我在空数据库中的 50k 文档 block 中插入了 5kk 文档。在我的 Code Duo MacBook 上大约需要 15-20 分钟。在插入期间,CouchDB 进程的最大内存消耗在一个 block 中插入 50k 文档时为 120MB,在插入 25k block 时约为 60MB。

最终数据库大小约为 1.2GB。空闲 CounchDB 进程的内存消耗为 40MB。获取单个文档是即时的(使用 Futon 网络前端)。

我正在插入以下格式的文档(使用 Python 生成的 JSON):

'{"_id" : "%09d", "name" : "example", "field%d" : "hello"}' % 
(num, random.randint(0, 100))

{"_id" : "005049980", "name" : "example", "field77" : "hello"}

_id 用作键,文档按该键排序。

关于您提供的示例查询。效率不高,因为通常您需要遍历整个文档集才能获得结果。但是两者都可以在创建特殊 View 后进行优化。

关于python - 如何存储和查询 5000 万个简单的 Python 字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725114/

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