实现大型数据集的快速查找:MySQL内存(HEAP),Memcached或其他内容

时间:2009-07-08 13:57:07

标签: mysql database memcached relational in-memory

目前正致力于以称为SNOMED的医学术语为中心的项目。 snomed的核心是三个关系数据集,其长度为350,000,1.1 mil和1.3 mil。我们希望能够快速查询此数据集以查找我们希望具有某种形状或形式的自动完成/建议的数据输入部分。

它目前在MySQL MyISAM数据库中仅用于开发目的但我们想要开始使用一些内存选项。它目前是30MB + 90MB + 70MB大小,包括索引。 MEMORY MySQL引擎和MemCached是显而易见的,所以我的问题是你会建议哪些或者哪里有更好的东西?

我们主要在应用程序级别使用Python,如果这有所不同的话。此外,我们还在一台小型专用服务器上运行,很快就会转向4GB DDR2。

编辑:其他信息

我们有兴趣快速保持建议和自动完成。对于这些类型的队列而言,一些能够很好地表现出来的东西是可取的。 snomed中的每个术语通常都有几个同义词,缩写和首选名称。我们将大量查询此数据集(包括索引在内的大小为90MB)。我们还在考虑建立一个倒置指数来加快速度并返回更多相关结果(许多术语都很长“蜕膜基底的整个盘绕动脉(体结构)”)。 Lucene或其他一些全文搜索可能是合适的。

2 个答案:

答案 0 :(得分:2)

从您的使用案例来看,您似乎想要进行全文搜索;我建议sphinx。即使在大型数据集上,它也非常快速。如果需要额外的速度,可以集成memcached。

答案 1 :(得分:1)

请参阅

如何使用Lucene做到这一点。 Lucene是最接近行业标准的全文搜索库。它速度快,效果好。但是,掌握Lucene需要时间 - 你必须处理许多低级细节。一种更简单的方法可能是使用Solr,一个更容易设置的Lucene子项目,并且可以提供can be used for autocomplete的JSON输出。

托德说,你也可以使用Sphinx。我从未使用它,但听说它与MySQL高度可集。我没有找到如何使用Sphinx实现自动完成 - 也许您应该将此作为单独的问题发布。