0

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

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

1 回答 1

0

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

于 2012-05-04T05:45:17.013 回答