【分布式搜索引擎】Elasticsearch如何部署以及优化查询性能
一、Elasticsearch生产集群如何部署
(1)es生产集群部署5台机器,若每台机器是6核64G的,那么集群总内存是320G
(2)假如我们es集群的日增量数据大概是2000万条,每天日增量数据大概是500MB,每月增量数据大概是6亿,15G。若系统已经运行了几个月,那么es集群里数据总量大概是100G左右。
(3)建有5个索引(这个结合自己业务来,看看自己有哪些数据可以放es的),每个索引的数据量大概是20G,所以这个数据量之内,每个索引可以分配8个shard,比默认的5个shard多了3个shard
二、Elasticsearch如何优化查询性能
1)Elasticsearch查询慢的原因
当我们往es里写的数据时,实际上都写到磁盘文件里去了,磁盘文件里的数据操作系统会自动将里面的数据缓存到os cache中。
那么当我们的数据量特别大的时候,比如上面的部署场景,5台机器总内存是320G,但是我们存储了3200G的数据,那么最多就十分之一的数据能存入内存。那么大部分查询肯定很慢。
走磁盘一般肯定上秒,搜索性能绝对是秒级别的,1秒,5秒,10秒。但是如果是走filesystem cache,是走纯内存的,那么一般来说性能比走磁盘要高一个数量级,基本上就是毫秒级的,从几毫秒到几百毫秒不等
2)如何优化呢?
es的搜索引擎严重依赖于底层的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的indx segment file索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。
还是拿上面的部署场景举例,5台机器总内存是320G,假如分配给JVM或其他的总内存占100G,那么我们还有220G内存可以用来缓存Elasticsearch查询数据。若我们能够保证往Elasticsearch中存储的数据不超过220G,也就是保证所有数据都能走缓存,那么查询效率肯定很高。
如果我们的存储数据要超过220G了,怎么办?通过加机器吧。。。
相关文章
- 第二章·Elasticsearch内部分片及分片处理机制介绍
- elasticsearch批量插入数据的时候出现java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection「建
- elasticsearch导出大量数据_error attempting to get column
- Elasticsearch多集群监控管理工具
- Spring Boot + Elasticsearch实现大批量数据集下中文的精确匹配-案例剖析
- 【愚公系列】2022年12月 Elasticsearch数据库-ELK环境的搭建(一)
- ElasticSearch Java整合
- 全文检索工具elasticsearch:第三章: Java程序中的应用
- 【ES三周年】一份初学者的Elasticsearch入门笔记
- 写了个监控 ElasticSearch 进程异常的脚本!
- 【ES三周年】windows-chrome安装Elasticsearch-head插件
- 【ES三周年】elasticsearch 其他字段类型详解和范例
- 【ES三周年】GPT引领学习之旅:适应不同级别程序员的Elasticsearch学习攻略
- ElasticSearch(五) Elasticsearch-jdbc实现MySQL同步到ElasticSearch详解程序员
- ElasticSearch(六) Elasticsearch在Thinkphp5.0中的使用详解程序员
- Redis实现快速数据转存至Elasticsearch(redis 转存 es)
- 最新消息!全球500亿条数据被 Elasticsearch 勒索者删除,中国受灾排第二