建议/意见,用于实现快速有效地搜索非常大的数据集中的项目列表

时间:2012-02-22 16:34:55

标签: redis nosql large-data

请评论并批评该方法。

场景:我在平面文件中有一个大型数据集(2亿条目)。数据的形式是 - 一个10位数的电话号码,后跟5-6个二进制字段。 每周我都会得到一个Delta文件,它只包含对数据的更改。

问题:给定一个项目列表,我需要确定数据集中是否存在每个项目(将是10位数字)。

我计划的方法

  • 将解析数据集并将其放入数据库(要在数据集的开头处完成) 像MySQL或Postgres一样)。我之所以想拥有RDBMS 第一步是我想拥有全时系列数据。

  • 然后用这个数据库生成某种Key Value商店 支持操作的最新有效数据,以确定是否 每个项目是否存在于数据集中(思考某种类型 NOSQL db,就像Redis这里针对搜索进行了优化。应该有 持久性和分发)。 此数据结构将为只读

  • 查询此键值存储以查明每个项目是否存在 (如果可能的话,一次匹配一个值列表而不是匹配 一次一件)。希望这是快速的。 将使用此功能作为REST API的后端

Sidenote :我喜欢的语言是Python。

1 个答案:

答案 0 :(得分:1)

快速查找的一些注意事项:

  • 如果您想一次检查一组数字,可以使用执行设置交集的Redis SINTER
  • 您可以通过在某些哈希函数(例如电话号码的第一位数字上分配数字范围)来分配数字范围(可能是更好的,您必须进行实验),这可能会受益于使用网格结构。当使用最佳散列时,每个节点的大小减少到使用10个节点时接近2000万个条目。
  • 如果您希望重复请求很可能,您可以将最后n个请求的电话号码缓存在较小的集合中并首先查询该号码。