Skip to main content
 首页 » 编程设计

用于使用集群进行索引和搜索的 Python

2025年05月04日10telwanggs

在一次不幸的 MySQL 遭遇之后,我终于放弃了使用它。

我有什么?

以下格式的大量文件:

ID1: String String String String 
ID2: String String String String 
ID3: String String String String 
ID4: String String String String 

我做了什么?

在功能强大的机器上使用 MySQL 以下列形式将所有内容导入数据库:

ID1 String 
ID1 String 
ID1 String 
ID1 String 
... 
... 

发生了什么?

数据库导入成功。索引失败是因为显然它需要超过 200 GB 来存储 20 亿条记录。合理的要求,但我根本没有那么多空间,因为表本身在规范化后占用了大约 240 GB。

我打算做什么?

我有一个由 20 个节点组成的集群,所有这些节点加起来大约有 80GB 的访问权限(它们都有一个 NFS 挂载)。我使用 Parallel Python 为分布式计算设置节点.我计划重写我的逻辑以利用集群的强大功能。

我的问题:

我需要做很多以下类型的查找:

哪些 ID 包含给定的字符串?

例如,给定一个任意字符串:“String1”,我需要知道“ID1, ID2234”包含它。

目前我知道两种方法:

  • 使用 python 调用 grep
  • 20 个中的每一个 节点控制一组 文件并根据搜索请求, 搜索他们的关联文件。

有人可以建议一个好的方法来加速这项效率低下的任务吗?

请您参考如下方法:

对于查找哪些 ID 与给定字符串关联的要求,我建议反转 ID/字符串关系,以便记录由唯一字符串作为键,关联数据是 ID 序列。字符串查找可以通过二进制搜索(如果已排序)或哈希算法来实现。如果您有很多重复的相同字符串,这可能会大大集中您的数据。