目前正在开展一个围绕医学术语SNOMED的项目.被标记的核心是三个关系数据集,它们的记录长度分别为350,000、110万和130万.我们希望能够快速查询此数据集的数据输入部分,以便在其中具有某种形式或形式的自动完成/建议.
它目前仅在MySQL MyISAM DB中用于开发目的,但我们希望开始使用一些内存选项.包括索引在内,当前大小为30MB 90MB 70MB. MEMORY MysqL Engine和MemCached是显而易见的,所以我的问题是,您会建议使用其中的哪个,或者还有更好的选择?
如果有所作为,我们主要在应用程序级别使用Python.另外,我们正在运行在一台小型专用服务器上,即将迁移到4GB DDR2.
编辑:附加信息
我们有兴趣保持建议和自动完成的速度.对于这些类型的查询器来说,将会有一些很好的表现.被修饰的每个术语通常具有多个同义词,缩写和首选名称.我们将大量查询此数据集(包括索引在内的大小为90MB).我们也正在考虑建立一个倒排索引,以加快处理速度并返回更相关的结果(许多术语很长,“蜕膜基底的整个螺旋状动脉(身体结构)”). Lucene或其他全文搜索可能是合适的.
> Techniques to make autocomplete on website more responsive
> How to do query auto-completion suggestions in Lucene
> autocomplete server side implementation
有关如何使用Lucene进行此操作. Lucene是最接近行业标准的全文本搜索库.它速度快,并提供高质量的结果.但是,掌握Lucene需要花费时间-您必须处理许多底层细节.一种更简单的方法可能是使用Solr,这是一个Lucene子项目,该项目更易于设置,并且可以提供JSON输出can be used for autocomplete.
正如Todd所说,您也可以使用Sphinx.我从未使用过它,但听说它与MysqL高度集成.我找不到如何使用Sphinx实现自动完成的功能-也许您应该将此作为单独的问题发布.