2012-04-26 148 views
0

我有一个大约十亿个唯一字符串的列表,其中最多有几十个字符。我希望找到包含或匹配搜索字符串的所有字符串,理想情况下小于100-200毫秒,尽可能少的硬件(我假设我需要大量的RAM)。什么是最好的方式去存储和检索?在十亿个唯一字符串列表中搜索一个子字符串

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

由于这个问题并没有明确的答案,所以应该将其转换为社区wiki? – Kevin 2012-04-26 10:02:29

回答

0

您是否考虑过使用众多MapReduce框架之一来解决您的问题? MapReduce的本质是你分而治之,所以你要解决一个非常简单的问题(比如说,你的十亿个唯一的字符串中只有一个包含了你的搜索术语)十亿次,然后你将十亿个答案结合成一个答案。而不是只有一台拥有大量RAM的机器来解决您的问题,您可以请求许多装备较少的机器一起解决您的问题。一探究竟。这可能是你在找什么。

相关问题