ELK 优化

160 阅读2分钟

ELK

1.NRT 近实时

2.Cluster

Term index FST

Term Dictionary

Term List Frame Of Reference

将拉链切分成blocks,每个block是256个docID,每个block单独使用上面的方式编码:Lucene计算一个block里要存储这些delta需要的空间,将这个信息加到block header,然后编码所有deltas。

咆哮位图

在filter cache中,Lucene需要编码一个int列表。这是一个很受欢迎的技术,可以加速频繁使用的过滤器。这是一个简单的cache。xxx。但是这个的约束跟倒排索引是不一样的:

  • 因为我们只需要cache那些常用的filter,压缩率就显得没那么重要了
  • 然而我们需要这些filter是比那些重复执行的filter要快,所以使用好的数据结构很重要
  • cached filters是保存在内存的,倒排索引是典型的保存在磁盘的

首先根据数字的高16位把拉链切分成不同的块(block)。

这就意味着,第一个block我们会编码0-65535的值,第二个block是65536-131071,以此类推。

然后在每个block我们分别编码低16位:如果列表数量小于4096,我们会使用选项一(Integer array),否则使用bitmap。

需要注意的是,使用Integer array的时候每个值实际上我们一般需要4个byte。但是在这里我们只需要使用2个byte因为block ID已经说明了高16位是啥

优化

合并请求

  • bulk 批量索引, 更新,删除

  • 多条搜索,多条获取

优化Lucene分段处理

  • 刷新refresh 和冲刷 flush的频率
  • segment合并策略
  • 存储限流

缓存

  • 过滤器缓存
  • 分片查询缓存
  • JVM 和操作系统缓存
  • 预热器