当前位置: 首页 > 面试题库 >

如何优化Elasticsearch的索引编制?

乔伯寅
2023-03-14
问题内容

我试图了解如何在Elasticsearch上优化索引。让我澄清我的需求;

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

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

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

要么

  • 我是否应该全部使用6台机器才能建立索引indexAindexB

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

先感谢您


问题答案:

这取决于情况,但是让我根据您的问题陈述得出一个方向,该结论导致了以下假设:

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

为了获得更好的索引性能,第一件事是您可能希望为索引使用单个分片(除非您正在使用路由)。但是由于您有6个具有单个分片的服务器,这会浪费资源,因此您可以将3个分片分配给indexA和indexB。这是针对当前方案,但建议使用约10个分片(以供将来扩展,并取决于您的数据大小)

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

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

如果有的话,转暖圈器。

避免在字段映射中使用“ doc_values”。(尽管这样做有利于减少搜索期间的内存占用量,但它会在索引期间准备字段值,因此会增加索引时间)

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

最后阅读一下。

温馨提示:上述某些方法会影响您的搜索效果。



 类似资料:
  • 本文向大家介绍MySQL如何优化索引,包括了MySQL如何优化索引的使用技巧和注意事项,需要的朋友参考一下 1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,花费越多。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据。这比顺序读取每一行要快得多。 大多数MyS

  • 问题内容: 使用Elasticsearch渗滤器索引时,有没有办法改善内存性能? 我为渗滤器创建了一个单独的索引。我大约有1000000个用户创建了保存的搜索(用于电子邮件警报)。创建此过滤器索引后,我的堆使用率飙升至100%,服务器对任何查询均无响应。我的资源有限,无法简单地在此问题上投入更多的RAM。唯一的解决方案是删除包含我已保存的搜索的索引。 根据我的阅读,渗滤器索引永久地驻留在内存中。这

  • 什么是索引? 数据库的索引与书籍的索引类似,有了索引就不需要翻转整本书。数据库的索引跟这个原理一样,首先在索引中找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,从而使查询速度提高几个数据量级。 不使用索引的查询称为全表扫描(这个术语来源于关系型数据库),也就是说,服务器必须查找完一整本书才能找到查询结果。这个过程跟我们在一本没有索引(目录)的书中查找信息很像:从第一页开始一直读完整本书。

  • 问题内容: 我有一个大约2亿个文档的ElasticSearch索引,总索引大小为90Gb。 我更改了映射,所以我希望ElasticSearch重新索引所有文档。 我编写了一个脚本,该脚本创建一个新索引(具有新映射),然后遍历旧索引中的所有文档,然后将其放入新索引中。 它似乎可以工作,但是问题是它的运行速度非常慢。它从两天前以300个文档/分钟开始,现在的速度是150个文档/分钟。 该脚本在elas

  • 本文向大家介绍mysql性能优化之索引优化,包括了mysql性能优化之索引优化的使用技巧和注意事项,需要的朋友参考一下   作为免费又高效的数据库,mysql基本是首选。良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多

  • 以下优化算法基于个人当前理解,能力有限,如有偏颇还请斧正。 简单查询索引优化 等值查询优化 单列等值查询,为该等值列加索引 多列等值查询,每列求取散粒度,按从大到小排序取前N列添加到索引(N可配置) SELECT * FROM tbl WHERE a = 123; SELECT * FROM tbl WHERE a = 123 AND b = 456; SELECT * FROM tbl WHER