关于实施快速有效的方法来搜索非常大的数据集中的项目列表的建议/意见

发布于 2025-01-08 06:16:56 字数 684 浏览 0 评论 0原文

请评论和批评该方法。

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

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

我计划的方法

  • 将解析数据集并将其放入数据库(在开始时完成) 周),例如 MySQL 或 Postgres。我想在 RDBMS 中使用 RDBMS 的原因 第一步是我想要完整的时间序列数据。

  • 然后从该数据库中生成某种键值存储 最新有效数据,支持操作判断是否 每个项目是否存在于数据集中(考虑某种 NOSQL db,就像这里的 Redis 一样,针对搜索进行了优化。应该有 持久性和分布式)。 此数据结构将是只读的

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

旁注:我喜欢的语言是 Python。

Please comment and critique the approach.

Scenario: I have a large dataset(200 million entries) in a flat file. Data is of the form - a 10 digit phone number followed by 5-6 binary fields.
Every week I will be getting a Delta files which will only contain changes to the data.

Problem : Given a list of items i need to figure out whether each item(which will be the 10 digit number) is present in the dataset.

The approach I have planned :

  • Will parse the dataset and put it a DB(To be done at the start of the
    week) like MySQL or Postgres. The reason i want to have RDBMS in the
    first step is I want to have full time series data.

  • Then generate some kind of Key Value store out of this database with
    the latest valid data which supports operation to find out whether
    each item is present in the dataset or not(Thinking some kind of a
    NOSQL db, like Redis here optimised for search. Should have
    persistence and be distributed). This datastructure will be read-only.

  • Query this key value store to find out whether each item is present
    (if possible match a list of values all at once instead of matching
    one item at a time). Want this to be blazing fast. Will be using this functionality as the back-end to a REST API

Sidenote: Language of my preference is Python.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薆情海 2025-01-15 06:16:56

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

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

A few considerations for the fast lookup:

  • If you want to check a set of numbers at a time, you could use the Redis SINTER which performs set intersection.
  • You might benefit from using a grid structure by distributing number ranges over some hash function such as the first digit of the phone number (there are probably better ones, you have to experiment), this would e.g. reduce the size per node, when using an optimal hash, to near 20 million entries when using 10 nodes.
  • If you expect duplicate requests, which is quite likely, you could cache the last n requested phone numbers in a smaller set and query that one first.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文