如何优化 elasticsearch 上的索引?
How to optimize indexation on elasticsearch?
我想了解如何在 elasticsearch 上优化索引。让我澄清一下我的需求;
- 我现在有两个索引。比方说,
indexA
和 indexB
(可以看出两个索引的大小大致相同)
- 我有 6 台机器专用于 elasticsearch(我们可以说完全相同的硬件)
- 我使用 elasticsearch 最重要的部分是写作,因为我实时进行大量写作。
所以我的问题是,如何使用这 6 台机器优化写入操作?
我是否应该将机器分成两部分,例如 indexA
的 3 台机器和 indexB
的 3 台机器?
或
我是否应该使用全部 6 台机器来索引 indexA
和 indexB
?
和
为了优化写入操作,我还需要注意什么?
提前致谢
视情况而定,但让我根据您的问题陈述确定一个方向,这导致了以下假设:
- 您想做更多的写操作(不担心搜索性能)
- 两个索引在同一个集群中
- 将来可以添加更多系统
为了获得更好的索引性能,首先您可能希望为您的索引使用单个分片(除非您正在使用路由)。但是因为你有 6 个服务器只有一个分片会浪费资源所以你可以为每个 indexA 和 indexB 分配 3 个分片。这是针对当前情况的,但建议有 ~10 个分片(为了将来的可扩展性和数据大小而定)
关闭副本(如果可能,因为索引请求在返回之前等待副本响应)。尽管在生产环境中,强烈建议至少有一个副本以实现高可用性。
将刷新率设置为“-1”或至少设置为更大的数字,比如“30m”。 (如果你这样做,你将失去 NRT 搜索,但正如你所提到的,你担心索引)
有的话转index warmers
避免使用 "doc_values" 进行字段映射。 (虽然它有利于减少搜索期间的内存占用,但它会增加索引时间,因为它会在索引期间准备字段值)
如果 possible/not 需要在映射中禁用 "norms"
最后阅读this。
注意事项:上述某些方法会影响您的搜索性能。
我想了解如何在 elasticsearch 上优化索引。让我澄清一下我的需求;
- 我现在有两个索引。比方说,
indexA
和indexB
(可以看出两个索引的大小大致相同) - 我有 6 台机器专用于 elasticsearch(我们可以说完全相同的硬件)
- 我使用 elasticsearch 最重要的部分是写作,因为我实时进行大量写作。
所以我的问题是,如何使用这 6 台机器优化写入操作?
我是否应该将机器分成两部分,例如
indexA
的 3 台机器和indexB
的 3 台机器?或
我是否应该使用全部 6 台机器来索引
indexA
和indexB
?和
为了优化写入操作,我还需要注意什么?
提前致谢
视情况而定,但让我根据您的问题陈述确定一个方向,这导致了以下假设:
- 您想做更多的写操作(不担心搜索性能)
- 两个索引在同一个集群中
- 将来可以添加更多系统
为了获得更好的索引性能,首先您可能希望为您的索引使用单个分片(除非您正在使用路由)。但是因为你有 6 个服务器只有一个分片会浪费资源所以你可以为每个 indexA 和 indexB 分配 3 个分片。这是针对当前情况的,但建议有 ~10 个分片(为了将来的可扩展性和数据大小而定)
关闭副本(如果可能,因为索引请求在返回之前等待副本响应)。尽管在生产环境中,强烈建议至少有一个副本以实现高可用性。
将刷新率设置为“-1”或至少设置为更大的数字,比如“30m”。 (如果你这样做,你将失去 NRT 搜索,但正如你所提到的,你担心索引)
有的话转index warmers
避免使用 "doc_values" 进行字段映射。 (虽然它有利于减少搜索期间的内存占用,但它会增加索引时间,因为它会在索引期间准备字段值)
如果 possible/not 需要在映射中禁用 "norms"
最后阅读this。
注意事项:上述某些方法会影响您的搜索性能。