前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES每日tip往期回顾(第一期)

ES每日tip往期回顾(第一期)

作者头像
tiaotiaoba
发布2022-01-18 10:16:51
3850
发布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 删除

本文分享自 跳跳爸的Abc 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档