返回介绍

PART Ⅰ : 容器云OPENSHIFT

PART Ⅱ:容器云 KUBERNETES

PART Ⅲ:持续集成与持续部署

PART Ⅴ:日志/监控/告警

PART Ⅵ:基础

PART Ⅶ:数据存储、处理

PART VIII:CODE

PART X:HACKINTOSH

PART XI:安全

优化

发布于 2024-06-08 21:16:46 字数 6566 浏览 0 评论 0 收藏 0

在文档写入时,会根据_routing来计算(OperationRouting类)得出文档要写入哪个分片。这里的写入请求只会写主分片,当主分片写入成功后,会同时把写入请求发送给所有的副本分片,当副本分片写入成功后,会传回返回信息给主分片,主分片得到所有副本分片的返回信息后,再返回给客户端。

在写入时,我们可以在Request自己指定_routing,也可以在Mapping指定文档中的Field值作为_routing。如果没有指定_routing,则会把_id作为_routing进行计算。由于写入时,具有相同_routing的文档一定会分配在同一个分片上,所以如果是自定义的_routing,在查询时,一定要指定_routing进行查询,否则是查询不到文档的。这并不是局限性,恰恰相反,指定_routing的查询,性能上会好很多,因为指定_routing意味着直接去存储数据的shard上搜索,而不会搜索所有shard。

段合并

关闭索引

1. 使用bulk批量操作

批量请求将比单文档索引请求产生更好的性能。

为了知道批量请求的最佳大小,您应该在具有单个shard的单个节点上运行基准测试。首先尝试一次索引100个文档,然后索引200个,然后索引400个,等等,在每次基准测试运行时将批量请求中的文档数量增加一倍。当索引速度开始趋于稳定时,您就知道已经达到了数据批量请求的最佳大小。

2. 查询返回大小

尽量使用 Scroll滚动查询API。

3. 按照日期规划索引

4. 索引分片个数设置

5. 索引分片副本数设置

6. 禁止大文档

  • 禁止单个Document的大小超过默认设置http.max_content_length(默认值100MB)(如果单个doc大小超过了设置值,elasticsearch会直接拒绝索引)。

  • 虽然可修改http.max_content_length参数提高默认doc大小,但 Lucene引擎依旧会有2GB大小的限制

  • 单个大doc会加重网络、内存和磁盘的消耗

7. 禁止节点开启Swapping

8. 节点给系统缓存预留内存

文件系统缓存将用于缓冲I / O操作

9. 文档ID尽量自动生成

10. 节点硬件尽量选性能好的

11. 提高索引缓存区大小

12. 使用多线程分散写入操作

使用单个线程发送批处理写入请求

13. 调整索引刷新间:refresh_interval

默认情况下索引的refresh_interval为1秒,这意味着数据写1秒后就可以被搜索到,每次索引的 refresh 会产生一个新的 lucene 段,这会导致频繁的 segment merge 行为,如果你不需要这么高的搜索实时性,应该降低索引refresh 周期,如:index.refresh_interval: 120s

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文