【发布时间】:2010-11-21 23:08:12
【问题描述】:
我有大约 5 亿个 128 位整数,每年增加大约 1 亿个。什么都不会被删除。这些数字在规模和时间上呈均匀分布。
基本上,我所需要的只是一个添加操作,该操作还返回该数字是否已存在于数据库中。另外,我不想为这个系统使用太多的 RAM,所以只将所有内容存储在内存中并不是我想要的。
到目前为止,我们已经在 MySQL 上使用了几个 MyISAM 表,使用两个 bigint 作为主键。这给了我们不错的性能,但我怀疑它不是这项工作的正确工具。我们在拆分表之前遇到了一些性能问题,并且我们在停电时遇到了损坏。此外,DB 为我们提供了更多我们不需要的功能。
我在 Linux 上使用 Python,但我愿意接受建议。
更新:Marcelo 的评论提到了Bloom Filter,这对我来说似乎很有希望。由于我正在使用哈希,我已经放弃了完全的准确性,所以这可能是一个很好的精度/性能折衷。
【问题讨论】:
-
你能告诉我们关于数字的分布吗?关于每年的新增内容?
-
它(应该)是统一的,数字是哈希值。速度稳定,因此每秒大约 3 次添加操作。