花几分钟看一下Elasticsearch原理解析与性能调优( 二 )
主节点功能
- 增加/删除索引
- 增加/删除节点不涉及文档的变更和搜索 , 因此单一的主节点不会成为集群的性能瓶颈
一个分片的最大文档数:(2^31-128)
一个索引的主分片数在建立时被确定 , 且无法修改:因为文档的存储是用shard = hash(routing) % number_of_primary_shards来确定文档的位置的 。 routing默认是id , 也可以自定义
分片的副本数可以随时修改
建立索引
PUT /blogs{"settings" : {"number_of_shards" : 3,"number_of_replicas" : 1}}
文章插图
故障转移增加一台机器到集群
文章插图
删除节点
文章插图
分布式写入冲突
文章插图
对于多个client的写入ES , 有可能造成写入冲突 , 导致数据的丢失
在一些场景下 , 数据丢失是可以接受的
但是在某些场景下 , 是不允许的 。
悲观控制并发传统数据库的控制方式 。 通过对记录加锁 , 来实现并发的串行执行
乐观并发控制ES采用乐观控制
所谓乐观控制 , 就是服务器假设大部分情况下 , 是不会发生冲突的 , 如果发生冲突 , 则拒绝修改 , 客户端可以需要通过重新获取并重试进行处理 。
过程如下图
文章插图
分布式文档存储确定文档位于那个shard
shard = hash(routing) % number_of_primary_shards
API支持带routing参数 , 来自定义路由 , 来确保相关文档路由到同一个分片以ID新建 , 写入和删除文档
文章插图
一致性保证
- none: 主分片活跃 , 允许写入
- all: 在所有分片活跃 , 允许写入
- quorum: 半数以上节点活跃 , 允许写入
新索引默认有 1 个副本分片 , 这意味着为满足 规定数量 应该 需要两个活动的分片副本 。但是 , 这些默认的设置会阻止我们在单一节点上做任何事情 。 为了避免这个问题 , 要求只有当 number_of_replicas 大于1的时候 , 规定数量才会执行 。
以ID检索文档与上图类似
以ID更新文档与上图类似 , 但在更新完文档后 , 会重建索引
在局部更新文档的时候 , 主分片会以整份文档来同步给副本 , 来保证数据的完整性
通过条件获取多个文档
文章插图
搜索返回特殊字段
GET /_search
{"hits" : {"total" :14,"hits" : [{"_index":"us","_type":"tweet","_id":"7","_score":1,"_source": {"date":"2014-09-17","name":"John Smith","tweet":"The Query DSL is really powerful and flexible","user_id": 2}},... 9 RESULTS REMOVED ...],"max_score" :1},"took" :4,"_shards" : {"failed" :0,"successful" :10,"total" :10},"timed_out" :false}
- took执行的毫秒数
- _shards查询分片的状态 , 例如有几个分片是失败的 , 几个是成功的
- timeout可以通过在查询设定超时 , 如果查询超过时间 , 则只返回已经成功获得的数据 , 剩余的数据将丢弃
- _index数据来源的Lucene索引 , 文档的每一个字段 , 都拥有一个不同的Lucene索引在查询中可以指定Lucene的索引 , 默认是不指定的 , 所以会查询该文档的所有索引 , 并汇总结果 。 如果指定 , 则会限定仅在指定的Lucene索引中查询数据
GET /_search?size=5 --tt-darkmode-color: #555555;">此方式只适用于浅分页 , 如果查询过深 , 会导致严重的性能问题 。
因为例如查询size为5 , from=10000 。 那么ES会从各分片中都查询10005条记录 , 如果有100个shard , 那么就会有100*10005条记录 , ES再对这100*10005排序 , 并仅返回5条记录
深分页【花几分钟看一下Elasticsearch原理解析与性能调优】使用游标scroll
它在ES中建立了一个有有效期的快照 , 提供给scroll进行数据的深度查询
倒排索引对一下文档进行倒排:
- The quick brown fox jumped over the lazy dog
- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- 花15.5亿元与中粮包装握手言和 加多宝离上市又进一步?|15楼财经 | 清远加多宝
- 关注下方公|微信昵称可以加雪花了!好友看到后都懵了……
- 借贷消费|花呗该为网贷背锅吗
- 华为|华为P50系列曝光,满溢屏+挖孔设计,花粉还喜欢吗?
- SVIP|QQ开放QID身份号:SVIP也只能花10元修改一次
- 旗舰|先涨再降行不通了!双12购机认准这三款国产旗舰不花冤枉钱
- P系列|华为P40最新价格确定,价格亲民!花粉:后悔买Mate40了
- 深陷|信贷产品当道,年轻人深陷其中,“花呗们”该不该背锅?
- 买下|罕见收购!Facebook花10亿多美金买下了一家ToB公司