揭阳网站制作平台,太原网站公司,网站自主建站,广州自建网站哪家服务好提升写入性能
使用 bulk 接口批量写入
节省重复创建连接的网络开销通过进行基准测试来找到最佳的批处理数量
延长 refresh 的时间间隔
通过延长 refresh#xff08;刷新#xff09;的时间间隔可以降低段合并的频率#xff0c;段合并十分耗费资源默认的刷新频率为1s…
提升写入性能
使用 bulk 接口批量写入
节省重复创建连接的网络开销通过进行基准测试来找到最佳的批处理数量
延长 refresh 的时间间隔
通过延长 refresh刷新的时间间隔可以降低段合并的频率段合并十分耗费资源默认的刷新频率为1s对 index 修改 index.refresh_interval 即可立即生效
初始化性能的大量写入
比如 reindex 或是导入基础数据这种一次性批量索引操作可以配置成不刷新并且把副本数也配置成0完了之后再设置成正常值
关闭操作系统的 swapping
操作系统会自动把不常用的内存交换到磁盘虚拟内存关闭后就不会进行交换
使用自动生成的id
指明文档 id 时es 需要先判断一下这个 id 对应的文档是否已经存在以做一些合并或者更新操作。如果使用自生成的 id可以跳过这个步骤加快索引速度
合理设置字段 mapping
不需要分析的字段就不用分析
合理设置分片和副本数量
副本数量越多写入越慢
提升查询性能
用过滤器上下文替代查询上下文
过滤器上下文不计算得分可以减少资源消耗过滤器结果可以缓存
避免使用脚本
脚本非常耗性能因为每次计算且无法缓存如果非用不可就用 painless 或者 expressions
提前索引字段
假如有如下的文档
PUT index/_doc/1
{designation: spoon,price: 13
}经常进行如下的范围查询
GET index/_search
{aggs: {price_ranges: {range: {field: price,ranges: [{ to: 10 },{ from: 10, to: 100 },{ from: 100 }]}}}
}索引的时候可以增加一个 price_range 字段用来存储范围
PUT index
{mappings: {properties: {price_range: {type: keyword}}}
}PUT index/_doc/1
{designation: spoon,price: 13,price_range: 10-100
}最开始的分组方式就可以改成如下形式
GET index/_search
{aggs: {price_ranges: {terms: {field: price_range}}}
}合理 mapping
数值数据可以映射为 numeric 类型或者keyword类型数字类型适合范围查询keyword 类型适合精确查询精确查询时搜索 keywrod 比搜索 numeric 更快
比如产品id或者 ISBN一种用于唯一标识图书的国际标准基本上是用在精确查询的场景中我们就可以映射为 keyword 类型
使用更轻量的查询语句
通配符查询很费性能尤其是通配符放在前面
不要使用关联关系
不管是嵌套还是父子都会使查询量倍增
增加副本数量
查询时会查询主分片或副本分片因此增加副本数量可以提高系统吞吐量
按时间查询时对时间进行四舍五入
这样可以更好的利用缓存
在可以接受的前提下可以从方式一改为方式二
方式一查询当前时间减去1小时到当前时间精确到秒的时间范围
GET index/_search
{query: {constant_score: {filter: {range: {my_date: {gte: now-1h,lte: now}}}}}
}方式二和方式一相比多了/m表示这是一个精确到分钟的相对时间范围
GET index/_search
{query: {constant_score: {filter: {range: {my_date: {gte: now-1h/m,lte: now/m}}}}}
}如果 index 不再写入可以合并分段
分段越少查询越快每次查询都要拆到所有分段去处理再合并结果有 _forcemerge 接口可以把分段数设为1甚至可以合并分片reindex 或 shink
POST /my-index-000001/_forcemerge给文件系统filesystem cache预留足够内存
es 非常依赖操作系统的文件缓存来提高查询速度预留至少一半的内存给文件系统缓存
使用 ssd 磁盘而且别用远程磁盘
es需要频繁读取磁盘
路由优化
节省磁盘空间
关闭不需要的特性
不被用来查询的字段不索引不做全文检索不分词不关注文档相关性关闭 norms不需要短语搜索关闭位置索引
不要使用自动 mapping
默认会对 string 字段做两次索引text 和 keyword
禁用 _source 字段
_source字段存储了文档原始的 json 格式如果不需要访问可以禁用
配置压缩存储
分段合并
段里面的数据是逻辑删除的段合并的时候会将这些数据真正删除
数字类型用最小数字类型
尽量选择占用空间较小的数组类型byte short integer long
参考博客
官网性能优化建议 [1]https://www.elastic.co/guide/en/elasticsearch/reference/8.11/how-to.html [2]https://pdai.tech/md/db/nosql-es/elasticsearch-y-peformance.html