在十亿个唯一字符串列表中搜索子字符串

时间:2012-04-26 10:00:49

标签: scalability database-performance

我有一个大约十亿个唯一字符串的列表,大多数是十几个字符。我想找到包含或匹配搜索字符串的所有字符串,理想情况是在不到100-200ms的时间内,以及尽可能少的硬件(我假设我需要大量的RAM)。存储和检索此内容的最佳方法是什么?

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

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用众多MapReduce框架中的一个来解决您的问题? MapReduce的本质是你分裂和征服,所以你解决一个非常简单的问题(比如,你的十亿个独特字符串中只有一个包含你的搜索词)十亿次,然后你将十亿个答案组合成一个答案。而不是只有一台具有大量RAM的机器来解决您的问题,您可以要求许多设备较少的机器一起解决您的问题。看看这个。这可能就是你要找的东西。