【问题标题】:Elasticsearch fuzzy matching optimization for huge server/server cluster大型服务器/服务器集群的 Elasticsearch 模糊匹配优化
【发布时间】:2012-03-28 16:57:38
【问题描述】:

我有一个索引,上面运行着相当复杂的查询。主要的减速是针对每个记录包含 2-5 个单词的字段运行的模糊查询。我主要需要找到具有 1-3 个不同字符的行。

在我的 4 核(使用 HT)和 8GB 内存机器上,我的查询在大约 1-2 秒内执行。 在具有 12 个内核(使用 HT)和 72Gb RAM 的服务器上,查询在 0.3-0.5 秒内执行。在我看来,这似乎不是对所提供硬件的合理扩展。我确信应该有一些隐藏选项供我调整以调整查询性能。

我浏览了弹性搜索指南,但找不到任何可以帮助我根据 CPU 或 RAM 数量调整性能或专门针对模糊查询调整弹性的内容。

另一个问题是,如果我添加另一个这样的服务器,它会如何扩展?查询时间会减少大约两倍吗?

【问题讨论】:

    标签: performance elasticsearch fuzzy-search


    【解决方案1】:

    这里有几种可能性。首先是您的查询是 I/O 绑定的。在这种情况下,仅添加另一台服务器可能会有所帮助,因为两个节点将从两个磁盘检索数据。另一种可能性是您的查询受 CPU 限制。在很大程度上,搜索单个分片是一个单线程进程。假设您的索引是使用默认设置创建的,它有 5 个分片。因此,在超过 5 个 CPU 上运行您的查询不会显着受益。在这种情况下,添加另一个节点只会因为网络开销而减慢速度。相反,您需要使用更多分片重新创建索引。

    【讨论】:

    • 所以这意味着如果我有 3 台服务器,每台服务器都有 12 个核心(24 个虚拟),那么对我来说最佳的分片数量类似于 (3*12)*1.5 = 54 ?还是可以使用副本实现相同的性能提升?顺便说一句,我将至少使用 1 的副本值作为冗余。
    • 当您在系统上运行单个查询时,大部分工作被分成 5 个线程(每个分片一个线程)。如果您启动第二个查询,它将使用另外 5 个线程。换句话说,如果您一次运行一个查询,副本没有帮助,但如果您同时运行许多查询,它们确实有帮助。但是,我会警告不要将此作为理论练习,因为瓶颈很容易从系统的一部分转移到另一部分,具体取决于您的数据和流量模式。您应该尝试根据真实数据模拟真实流量,并通过测量系统性能来识别瓶颈。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2013-03-08
    相关资源
    最近更新 更多