






















winRain · 2022 年 6 月 15 日 · 7198 次点击
这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。
背景:由于公司业务需要,引入了 es 。于是,我在公司内网虚拟机( 8c8g ,固态硬盘)上用 docker compose 启动了一个 es 和 kibana ,并给 es 的 jvm 分配了 6g ,并配置了一些 jvm 参数。
当我用 spring data elasticsearch 的 repository saveAll 操作去批量插入 100 条数据时,发现耗时在 200 ms 左右。其实我感觉这个速度跟正常用公有云的 rds 批量插入数据是差不多了。
那么问题来了,es 这个插入速度是正常的吗,是不是还有其他优化参数可以配置,用来提升这个插入性能?如果这样是正常的,那么 es 在插入和查询上相比于 rds ,在实际应用中,优势体现在哪些地方呢?
2 strawberryBug 2022 年 6 月 15 日 via Android不正常。 |
3 MIUIOS 2022 年 6 月 16 日es 和 kibana 两个内存猛兽你全跑了,剩给系统的时间不多了 |
4 billlee 2022 年 6 月 16 日1. es 需要使用系统 page cache, 一般配置 jvm 堆只能使用一半的系统内存,也就是说 8g 机器配置 4g 的堆,剩下的内存也不能用来跑 kibana 了 |
5 mosliu 2022 年 6 月 16 日刚才看了眼 分析:这个的内存分配极为不合理啊 |
6 winRain 2022 年 6 月 17 日@mosliu 其实我 200 多条的数据插入速度也跟你这个差不多。但是 kibana 和 es cache 分 2G 这个我之前确实不太懂,没考虑到,那如果按这个 8g 的虚拟机来的话,内存应该怎么分配呢 |
8 winRain 2022 年 6 月 17 日@billlee 我后面也试过公有云的 es ,用的免费版那种,对比下来跟我虚拟机搭的这个环境也差不了多少。在我最刚开始的想法中,es 的 bulkindex 应该是可以类比为 MySQL 的批量插入的,而我用公有云的 rds 批量插入几十条数据,实际可能几十 ms 肯定不到 100 ms ,那么我刚开始觉得,es 既然是专门用来做搜索的,批量插入这种应该不慢,起码我在公有云上随便搭个 redis ,性能也就几十 ms 。所以我一直想说,有没有什么办法可以让 es 的批量插入 几十 条数据的速度也能在几十 ms |
9 mosliu 2022 年 6 月 17 日@winRain 嗯 我这边同时有 10+ 个程序同时在操作 es 吧... 记得新插入的数据是放在内存里面的。等定时再去持久化。这个时间可配置,我忘了是啥了。 你这内存分配确实不合理。一般至少留和 heap 一样的内存给 es 。 我没用过很大的集群。只是十几个节点( 12C ,64G )的小集群的情况 仅供参考 |
10 winRain 2022 年 6 月 18 日@mosliu 我在另一台 32 g 内存的云服务器也按同样的方式搭了 es 和 kibana ,这样来看的话,应该不存在上面说的没有 os cache 的问题,但速度还是 100 多 ms 。这样的话,抛去硬件因素,es 有没有可能通过一种搭建方式,能够达到 20 多条用 bulk index 也能达到 50 ms 以下的插入速度? |
11 mosliu 2022 年 6 月 18 日开 20 线程 不用 bulk 直接 indexrequest |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。