栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch note

ElasticSearch note

es为什么那么快?es索引的数据结构?

倒排索引

1,Term Index
B-Tree通过减少磁盘寻道次数来提高查询性能.

es更绝,直接把term组织成term index,直接压缩放在内存中,不用读磁盘

2,Term Dict
为了能够快速找到某个term,需要使用二分法以logN时间复杂度查找某个term

每一个term 对应了一个posting list,就是出现过这个term的文档的编号,注意posting list的编号是有序的

3,Posting List
posting list是一个int的数组,存储了所有符合某个term的文档id

1,Term Index采用FST,有效的减少的空间,可以使索引在内存中。mysql通过B+树索引查找需要读取磁盘,es采用了各种压缩算法,使索引尽可能的在内存中。

2,

3,Posting List的压缩方法:
3.1,FOR算法,frame Of Reference
当使用于 查询情况 时,查询就变成了一个“评分”的查询。评分查询(scoring queries)不仅仅要找出匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。更适合用FOR算法。
3.2,RBM算法,Roaring bitmaps 位图压缩算法
过滤查询(Filtering queries)只是简单的检查包含或者排除,这就使得计算起来非常快。考虑到至少有一个过滤查询(filtering query)的结果是 “稀少的”(很少匹配的文档),并且经常使用不评分查询(non-scoring queries),结果会被缓存到内存中以便快速读取,所以适合采用压缩效率更高的Roaring bitmaps算法。
1)、将0-32-bit [0, n) 内的数据劈成 高16位和低16位两部分数据
2)、高16位用于查找数据存储位置,低16位存在在一个容器中(不就是一个类似HashMap结构么)
容器补充:容器是一个动态的数组,当数据小于4096个时,使用16bit的short数组存储,多余4096个时,使用216bits的BitMap存储;
为什么使用两种数据结构来存储低16位的值:
short数组:2bit * 4096 = 8KB 
BitMap:存储16位范围内数据 65536/8 = 8192b,
所以低于 4096个数,short 数组更省空间。

总结就是:1.高效的压缩;2.快速的编码解码

ES性能优化(分片,路由,查询方式)

索引在es中是一组文档的集合

分片指的是,因为es是个分布式搜索引擎,所以索引通常会分布在不同的节点.这些分布在不同节点上的数据就是分片,es会自动管理和组织分片,并且在必要的时候对分片数据进行reblance

副本是保持高可用

分片配置不能随意改变,如果要改动就需要reindex

每个分片本质上就是一个Lucene索引,因此会消耗相应的文件句柄,内存和CPU资源
每个搜索请求会调度到索引的每个分片中,所以分片要尽可能分散在不同节点,当分片开始竞争相同的硬件资源的时候性能就会下降

为什么是近实时的?

es 中的 segment、translog、refresh、flush、fsync、commit poit 等概念介绍_王大呀呀的博客-CSDN博客_es fsync

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号