tiaotiaoba
ES每日tip往期回顾(第一期)
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
tiaotiaoba
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
ES每日tip往期回顾(第一期)
ES每日tip往期回顾(第一期)
tiaotiaoba
关注
发布于 2022-01-18 10:16:51
385
0
发布于 2022-01-18 10:16:51
举报
文章被收录于专栏:
跳跳爸的Abc
es中建索引是指创建一个保存数据的目录,用于保存倒排索引,索引创建之后是不可变的(Immutable),只允许新增字段
es字段是否索引只能在创建索引时配置,不同于mysql,es不能在字段创建后再给字段“加索引”
索引字段有为“索引(indexed)”和“存储(stored)”两个属性,只有被“索引”的字段才能在查询/排序条件中使用,只有被“存储”的字段才能在请求的时候返回字段内容
必须保证索引字段都存储(stored)才能使用update操作,update原理是先从索引中get到原文档内容,然后与传入的欲更新字段合并,作为一个新的文档index回去,如果有字段不是stored,那么update之后该字段就丢失了
为了提升查询性能,索引文件会假定为不可变文件,在索引时预处理(排序/跳跃表等),因此为了反应数据变化,会有刷新时间的概念(隔多少时间重新打开一次索引文件)
es还无法做到资源二级调度(共享线程池/缓存区等,无法按索引隔离资源),所以如果集群内某一个索引发生大量慢查询或者污染缓存区(用低复用率内容踢出其他索引高复用率缓存),会导致search线程池满或者引起gc,阻塞集群内其他索引的响应
es每次refresh时需要重新打开所有索引文件(需要解压/刷缓存等),如果索引文件较多且更新频繁,每次refresh的开销会比较大,使机器负载升高,影响查询rt,所以更新频繁的大索引设置的刷新时间会限制到5s以上(实时程度下降),要提高实时性,必须减小索引大小
es有window size的概念(from+size),每次查询先从每个shard中取window size条数据,然后在集群中某个节点汇聚数据,排序后取size条数据返回,假设有n个shard,有效数据占比 size / (n * (from+size)),因此每次查询会限制window size,避免过多垃圾数据加重gc和IO负担,引起慢查询
因为索引文件是不可变的,数据更新需要重新打开索引文件加载,所以任何时刻查询的数据都是打开索引文件当时的快照数据,刷新时间的长短决定了数据的近实时(nrt)程度
es有translog,也就是write ahead log,任何操作都是先写translog再入索引文件,避免服务挂的时候数据丢失
不同于search,es的get操作是可以从translog中提取文档的,所以get是个真实时操作,可以拿到刚写入的文档数据
本文参与
腾讯云自媒体同步曝光计划
,分享自微信公众号。
原始发表:2017-10-10,如有侵权请联系
cloudcommunity@tencent.com
删除
es
缓存
http
本文分享自
跳跳爸的Abc
微信公众号,
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
es
缓存
http
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐