【问题标题】:How to optimize indexation on elasticsearch?如何优化elasticsearch的索引?
【发布时间】:2015-07-05 22:35:01
【问题描述】:

我正在尝试了解如何在 elasticsearch 上优化索引。让我澄清一下我的需求;

  • 我现在有两个索引。比方说,indexAindexB(可以看到两个索引大小大致相同)
  • 我有 6 台机器专用于 elasticsearch(我们可以说完全相同的硬件)
  • 我的 elasticsearch 使用中最重要的部分是写作,因为我正在实时进行大量写作。

所以我的问题是,如何使用这 6 台机器优化写作操作?

  • 我是否应该将机器分成两部分,例如 indexA 的 3 台机器和 indexB 的 3 台机器?

  • 我应该使用全部 6 台机器来索引 indexAindexB 吗?

  • 为了优化写操作,我还需要注意什么?

提前谢谢你

【问题讨论】:

  • elastic.co/blog/… 是你最好的朋友 :-)。
  • 我会说 3 台机器用于一个索引,另外 3 台用于索引性能会更好,但我没有测试来证实这一点,我也不相信这会在表现。这是因为线程池用于批量索引(例如),并且同一个池用于两个索引(如果将索引放在 6 台机器上),而不是一个索引。但如果可以的话,最好的办法就是测试一下。
  • 感谢@AndreiStefan 的cmets,我会尝试测试一下

标签: indexing elasticsearch lucene


【解决方案1】:

这取决于,但让我根据您的问题陈述采取一个方向,这导致以下假设:

  • 你想做更多的写操作(不担心搜索性能)
  • 两个索引都在同一个集群中
  • 未来可以添加更多系统

为了获得更好的索引性能,首先您可能希望为索引设置一个分片(除非您使用路由)。但是由于您有 6 台服务器只有一个分片会浪费资源,因此您可以为 indexA 和 indexB 分别分配 3 个分片。这是针对当前场景的,但建议使用约 10 个分片(用于未来的可扩展性和您的数据大小)

关闭副本(如果可能,因为索引请求会在返回之前等待副本响应)。尽管在生产环境中,强烈建议至少拥有一个副本以实现高可用性。

将刷新率设置为“-1”或至少设置为更大的数字,例如“30m”。 (如果这样做,您将丢失 NRT 搜索,但正如您所提到的,您担心索引)

如果有的话,请转至index warmers

避免在字段映射中使用“doc_values”。 (虽然它有利于减少搜索期间的内存占用,但它会增加您的索引时间,因为它会在索引期间准备字段值)

如果可能/不需要,请在映射中禁用“规范”

最后阅读this

请注意:上述某些方法会影响您的搜索性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2012-07-23
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多