elasticsearch:如果我添加更多服务器节点,我可以获得更好的查询性能吗?

时间:2014-07-10 11:05:17

标签: performance elasticsearch

我是elasticsearch的新手,我正在测试我的Windows 7上的一个节点,我索引了2百万个文档,但(匹配)查询时间正在增加,大约3秒(未缓存)和1.5秒(缓存)。

如果我投入生产,我想保持1秒钟的查询,所以我的问题是:

如果我添加更多服务器(节点),我可以获得更好的查询性能,假设硬件适合每个服务器并优化ES配置。例如,如果我的数据增长并且我添加n个服务器(节点)这是否意味着我获得更低的查询时间(低于1秒)?这是“scalling”对弹性搜索的意义吗?

这是我的查询(未经过滤的)我也需要得分:

json = '{
    "from" : 0, "size" : 10,
    "query" : {
        "bool" : {
            "should": [
                { "match": { "answer_1_words": "dooms best aynol steven" }},
                { "match": { "answer_2_words": "mokrane obione kenobi zembla" }},
                { "match": { "answer_3_words": "Benghazi fake yahai tperdina" }},
                { "match": { "answer_4_words": "jackson thisisit bonzai peterpan" }},
                { "match": { "answer_5_words": "Zohra Drif mami jenaipas" }},
                { "match": { "answer_6_words": "Bon wa3lah hagda hamoud" }},
                { "match": { "answer_7_words": "cola coca petrole seule" }},
                { "match": { "answer_8_words": "dieu help salut bentley" }},
                { "match": { "answer_9_words": "edite piaf chanson merci" }},
                { "match": { "answer_10_words": "gooloom seigneur anneaux espace" }}
            ]
        }
    }
}'

1 个答案:

答案 0 :(得分:0)

Shards将数据分散到多个服务器上,允许并行查询,但是在创建索引后,您无法更改索引上的分片数。如果您的索引是基于时间的,那么这并不是一件坏事,因为您将一直在创建新索引。

当查询进入ES时,它会将它分成许多碎片,然后对结果执行map / reduce操作。如果您同时进行多个查询,则会将它们分配到副本/原色中。

因此,如果您的用例是一个高级用户一次进行单个查询,那么您需要添加分片/计算机并重新索引数据。如果您的用例是大量用户同时点击,则您希望添加更多计算机和副本(即由于加载而导致的扩展范围)。

您希望将单个分片大小保持在2-4GB范围内...因此,如果您不使用时间序列数据,那么您将需要分配足够的分片/机器来处理您未来的数据增长

您添加的副本越多,初始索引的速度就越慢,因此需要进行权衡。

相关问题