【发布时间】:2014-09-10 17:34:20
【问题描述】:
我有一对 (key,value),其中包含 key = string , value = int。我尝试从大型文本语料库构建索引,因此我存储了字符串和标识符。对于我从语料库中读取的每个术语,我都必须检查索引以查看它是否存在,所以我需要快速查找(如果可能的话 O(1))。我正在使用 python 字典来创建索引。问题是我用完了 Ram(16GB Ram)。我的替代方法是使用字典,当我的 ram 使用率达到 90% 时,我使用 sqlite3 数据库将这些对存储到磁盘。但是现在的问题是查找时间太长了(先检查dict,如果失败就去检查磁盘上的数据库)。
我正在考虑切换到 Redis-db。我的问题是,我应该将键值存储为字符串还是应该将它们散列然后存储它们? (键是包含(2~100 个字符)的字符串。那么值呢,我应该对它们尝试任何东西(值是 int32 数字)吗?
编辑:
我想存储每个术语及其标识符(唯一对),如果我读取一个术语并且它存在于索引中然后传递它。
编辑2:
我尝试使用 redis,但它似乎真的很慢(?),我使用相同的代码而不是字典太慢了。有什么建议吗?
【问题讨论】:
-
如果您的用例可以容忍一小部分误报(即确定存在密钥但实际上不存在),那么您可以使用bloom filter
标签: python database dictionary redis