Elasticsearch 7.3中,文档内部运作原理如何解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1914个文字,预计阅读时间需要8分钟。
1. 数据路由1.1 数据存储如何到达相应分区?一个文档最终会落在主分区的某个分区上。具体应该落在哪一个分区,取决于数据路由。
1.2 路由算法shard=hash(routing) % number_of_primary
1、数据路由 1.1 文档存储怎么路由到相应分片?一个文档,最终会落在主分片的一个分片上,到底应该在哪一个分片?这就是数据路由。
1.2 路由算法shard = hash(routing) % number_of_primary_shards
简单来说就是哈希值对主分片数取模。
举例:
对一个文档经行crud时,都会带一个路由值 routing number。默认为文档_id(可能是手动指定,也可能是自动生成)。
存储1号文档,经过哈希计算,哈希值为2,此索引有3个主分片,那么计算2%3=2,就算出此文档在P2分片上。决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,每次过来,从hash函数中,产出的hash值一定是相同的。无论hash值是几,无论是什么数字,对number_of_primary_shards求余数,结果一定是在0~number_of_primary_shards-1之间这个范围内的。
1.3 手动指定 routing number
PUT /test_index/_doc/15?routing=num { "num": 0, "tags": [] }
场景:在程序中,架构师可以手动指定已有数据的一个属性为路由值,好处是可以定制一类文档数据存储到一个分片中。缺点是设计不好,会造成数据倾斜。所以,不同文档尽量放到不同的索引中。剩下的事情交给es集群自己处理。
1.4 主分片数量不可变涉及到以往数据的查询搜索,所以一旦建立索引,主分片数不可变。
2、文档(Document)的增删改内部机制(写数据过程)增删改可以看做update,都是对数据的改动。
本文共计1914个文字,预计阅读时间需要8分钟。
1. 数据路由1.1 数据存储如何到达相应分区?一个文档最终会落在主分区的某个分区上。具体应该落在哪一个分区,取决于数据路由。
1.2 路由算法shard=hash(routing) % number_of_primary
1、数据路由 1.1 文档存储怎么路由到相应分片?一个文档,最终会落在主分片的一个分片上,到底应该在哪一个分片?这就是数据路由。
1.2 路由算法shard = hash(routing) % number_of_primary_shards
简单来说就是哈希值对主分片数取模。
举例:
对一个文档经行crud时,都会带一个路由值 routing number。默认为文档_id(可能是手动指定,也可能是自动生成)。
存储1号文档,经过哈希计算,哈希值为2,此索引有3个主分片,那么计算2%3=2,就算出此文档在P2分片上。决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,每次过来,从hash函数中,产出的hash值一定是相同的。无论hash值是几,无论是什么数字,对number_of_primary_shards求余数,结果一定是在0~number_of_primary_shards-1之间这个范围内的。
1.3 手动指定 routing number
PUT /test_index/_doc/15?routing=num { "num": 0, "tags": [] }
场景:在程序中,架构师可以手动指定已有数据的一个属性为路由值,好处是可以定制一类文档数据存储到一个分片中。缺点是设计不好,会造成数据倾斜。所以,不同文档尽量放到不同的索引中。剩下的事情交给es集群自己处理。
1.4 主分片数量不可变涉及到以往数据的查询搜索,所以一旦建立索引,主分片数不可变。
2、文档(Document)的增删改内部机制(写数据过程)增删改可以看做update,都是对数据的改动。

