深入理解shard

索引存储的时候会分为shard,这样可以提高读写性能,并可以实现负载均衡。

索引不变性

索引一旦被创建,就不可改变。

动态索引

如何在保持不可变好处(顺序写、缓存在内存)的同时更新倒排索引,不是重写整个倒排索引,而是增加额外的索引反映最近的变化。

elasticsearch索引组成

索引组成.png

Lucene引入了per-segment search,每个segment就是一个倒排索引,但是Elasticsearch下是segment的集合,当Elasticsearch搜索索引时,它发送查询请求给该索引下的所有shard,然后过滤这些结果,聚合成全局的结果。

建立索引


内存缓存区有即将提交文档的Lucene索引.png

提交后,新的段加到了提交点,缓存被清空.png

新的文档首先写入内存区的索引缓存。隔一段时间,buffer被提交:一个新的segment(一个额外的新的倒序索引)将被写到磁盘,一个新的提交点(commit point)(包含新的segment的名称)被写入磁盘。 磁盘fsync,所有在内核文件系统中的数据等待被写入到磁盘,来保障它们被物理写入。新的segment被打开,使它包含的文档可以被索引。内存的缓存被清除,等待接受新的文档。
近实时
上面是没有刷新的情况下,加入刷新的情况(默认1秒)如下:

缓存内容已经写到段中,但是还没提交.png

在内存中索引的文档会被写入到一个新的segment。但是现在我们将segment首先写入到内核的文件系统缓存,这个过程很轻量,然后再flush到磁盘,这个过程很耗时。但是一旦一个segment文件在内核的缓存中,它可以被打开被读取。

防丢失



Translog.png
写缓存的同时,在写translog。
提高查询性能
合并segment
合并segment

合并segment.png

elaticsearch自动在后台完成segment的合并,新的segment随后flush到硬盘,写入新的提交点并删除旧的段。随后新的段打开供搜索,旧的段被删除。
也可以通过optimize API完成segment的合并。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值