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

使用集群进行索引和搜索的Python?,python,search,indexing,distributed,cluster-computing,Python,Search,Indexing,Distributed,Cluster Computing,在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

在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
...
...
发生了什么事?

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

我打算做什么?

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

我的问题:

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

什么ID包含给定的字符串

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

目前我知道两种方法:

  • 使用python调用grep
  • 20人中的每一人 节点控制一组数据 文件,并应搜索请求, 搜索其关联的文件

有人能提出一个很好的方法来加速这项效率低下的任务吗?

我建议考虑使用非关系数据库来支持这项任务。有许多键/值存储可以用来存储数据,它们应该比数据库更高效。首先,您可能想看看


编辑:您是否对数据库中的数据使用了尽可能紧凑的数据类型?您的IDs整数大小是否为存储IDs范围所需的最小整数?如果字符串是ASCII,是否将它们存储为ASCII字符串而不是Unicode(VARCHAR而不是NVARCHAR)?

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

谢谢您的回复。我一直在研究它们,但假设我选择BerekelyDB是为了满足我的需要(因为它有很好的python绑定),那么考虑到我的集群没有那么多空间并且依赖于NFS装载,它会有多大用处呢?我是说,工作流程是什么样子的?你能从这个角度给我一些见解吗?@Legend:恐怕我没有伯克利DB的经验,我的知识是理论性的。我只是想象你会使用NoSQL数据库而不是SQL数据库。话虽如此,现在我进一步想,NoSQL数据库可能无法更紧凑地索引您的数据,也可能无法解决您的问题。我对唐的回答投了赞成票,他的观点肯定是有价值的。我也在编辑我的问题,想问更多的问题。