【问题标题】:Python for indexing and searching using a cluster?Python 用于使用集群进行索引和搜索?
【发布时间】:2011-04-18 02:47:32
【问题描述】:

在与 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 个中的每一个 节点控制一组 文件并根据搜索请求, 搜索他们的关联文件。

有人可以提出一个好方法来加快这项原本效率低下的任务吗?

【问题讨论】:

    标签: python search indexing distributed cluster-computing


    【解决方案1】:

    我建议考虑使用非关系数据库来支持这一点。您可以查看许多键/值存储来存储数据,它们应该比数据库更有效。您可能想先查看NoSQL on Wikipedia

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2010-11-18
      • 2015-12-07
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多