【问题标题】:Searching for a substring in a list of a billion unique strings在十亿个唯一字符串的列表中搜索子字符串
【发布时间】:2012-04-26 10:00:49
【问题描述】:

我有一个包含大约十亿个唯一字符串的列表,其中大多数长度为几十个字符。我想找到包含或匹配搜索字符串的所有字符串,最好在不到 100-200 毫秒的时间内,并且在尽可能少的硬件上(我假设我需要大量的 RAM)。存储和检索它的最佳方法是什么?

  • 据我所知,MySQL 的LIKE '%search%' 不使用索引,但LIKE '%search'LIKE 'search%' 都使用。作为最后的手段,这是可以接受的,但并不理想,因为我想在目标字符串中的任何位置找到搜索字符串。
  • 使用像 Redis 这样的键值对存储需要存储所有可能的子字符串组合,而且我认为需要大量 RAM。
  • 字符串列表大约有十几个 GB。像 Lucene 这样的全文搜索服务器是否可行,甚至是理想的,而不是拥有数十亿行/文档/记录?它肯定会节省解析。

【问题讨论】:

  • 而且由于这个问题并没有明确的答案,是否应该将其转换为社区维基?

标签: scalability database-performance


【解决方案1】:

您是否考虑过使用众多 MapReduce 框架之一来解决您的问题? MapReduce 的本质是分而治之,因此您正在解决一个非常简单的问题(例如,十亿个唯一字符串中的一个是否包含您的搜索词)十亿次,然后您将十亿个答案组合成一个答案。而不是只有一台具有大量 RAM 的机器来解决您的问题,您可以要求许多配备较少的机器一起解决您的问题。一探究竟。它可能是您正在寻找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多