代码之家  ›  专栏  ›  技术社区  ›  nategood

实现对大型数据集的快速查找:mysql内存(堆)、memcached或其他

  •  3
  • nategood  · 技术社区  · 15 年前

    目前正在研究一个以医学术语snomed为中心的项目。snomed的核心是三个关系数据集,长度分别为350000、110万和130万条记录。我们希望能够快速地查询数据输入部分的数据集,在数据输入部分我们希望有某种形式或形式的自动完成/建议。

    它目前在mysql myisam数据库中,只是为了开发,但我们想开始使用一些内存选项。目前它的大小为30MB+90MB+70MB,包括索引。内存mysql引擎和memcached是很明显的,所以我的问题是,你会建议哪一个呢,还是有更好的呢?

    如果这有区别的话,我们主要在应用程序级别使用Python。另外,我们正在一台小型专用服务器上运行,很快就要迁移到4GB DDR2了。

    编辑:附加信息

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    7 年前

    请看

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

    正如托德所说,你也可以使用狮身人面像。我从未使用过它,但听说它与MySQL高度集成。我找不到如何使用斯芬克斯实现自动完成-也许你应该把这作为一个单独的问题发表。

        2
  •  2
  •   Todd Gardner    15 年前

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