快速,可扩展的字符串查找

时间:2010-09-29 11:09:12

标签: scaling lookup

我有一套500万字符串。这些目前存储在单列MySQL表中。我的应用程序必须执行查找并检查给定的字符串是否在集合中。这当然可以使用HashSet(在Java中)完成。但是,我想知道是否存在任何现有的,广泛使用的,经过验证的解决方案,而不是构建自定义解决方案?这似乎是一种常见的情况。该解决方案应该是可扩展的(该集合可能增加超过500万),具有故障转移(因此可能是分布式的)并且在大量请求下表现良好。有什么建议吗?

更新:我的应用程序还可以查询以检查全局(500万个)集中是否存在一组给定的字符串。

3 个答案:

答案 0 :(得分:1)

您可以尝试TriePatricia-trie。第二个是更高效的内存。另外here您可以找到2个数据结构的比较[Trie,TreeSet],内存数据库和他们的表现。

答案 1 :(得分:1)

尝试memcached,一个高性能的分布式内存对象缓存系统。您使用键/值哈希查找。 Facebook uses memcached和许多其他高度可扩展的网站一样。需要存储更多字符串?只需向集群添加更多memcached实例即可。另外,您可以在首先查询memcached的2层缓存设置中使用,如果缓存未命中,则查询完整数据库。

您是否考虑过将column indexing添加到MySQL数据库?支持哈希,b树和r树。

MySQL也可以replicated and clustered以获得高可扩展性。

答案 2 :(得分:0)

虽然Trie可能是最好的解决方案,但对排序的字符串列表进行二进制搜索也应该能够很好地运行。