前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch(7.2.2)-es⽂档的路由原理

ElasticSearch(7.2.2)-es⽂档的路由原理

作者头像
cwl_java
发布2019-11-04 11:24:54
4140
发布2019-11-04 11:24:54
举报
文章被收录于专栏:cwl_Javacwl_Java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102857697

简介:当新增⼀个⽂档时,这个⽂档会存放在那个分⽚中呢?

前⾔
  • 当新增⼀个⽂档的时候,⽂档会被存储到⼀个主分⽚中。 Elasticsearch 如何知道⼀个⽂档应该存放到哪个分⽚中呢?当我们创建⽂档时,它如何决定这个⽂档应当被存储在分⽚ 1 还是分⽚ 2 中呢?
路由算法
  • ⾸先这肯定不会是随机的,否则将来要获取⽂档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下⾯这个公式决定的:
代码语言:javascript
复制
shard = hash(routing) % number_of_primary_shards
  • routing 是⼀个可变值,默认是⽂档的 _id ,也可以设置成⼀个⾃定义的值。 routing通过 hash 函数⽣成⼀个数字,然后这个数字再除以 number_of_primary_shards (主分⽚的数量)后得到 余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的⽂档所在分⽚的位置。
  • 这就解释了为什么我们要在创建索引的时候就确定好主分⽚的数量 并且永远不会改变这个数 量:因为如果数量变化了,那么所有之前路由的值都会⽆效,⽂档也再也找不到了。
  • 新增⼀个⽂档(指定id)
代码语言:javascript
复制
PUT /nba/_doc/1
{
	 "name": "哈登",
	 "team_name": "⽕箭",
	 "position": "得分后卫",
	 "play_year": "10",
	 "jerse_no": "13"
}
  • 查看⽂档在哪个分⽚上
代码语言:javascript
复制
GET /nba/_search_shards?routing=1
{
	"nodes": {
		"V1JO7QXLSX-yeVI82WkgtA": {
			"name": "node-1",
			"ephemeral_id": "_d96PgOSTnKo6nrJVqIYpw",
			"transport_address": "192.168.1.101:9300",
			"attributes": {
				"ml.machine_memory": "8589934592",
				"xpack.installed": "true",
				"ml.max_open_jobs": "20"
			}
		},
		"z65Hwe_RR_efA4yj3n8sHQ": {
			"name": "node-3",
			"ephemeral_id": "MOE_Ne7ZRyaKRHFSWJZWpA",
			"transport_address": "192.168.1.101:9500",
			"attributes": {
				"ml.machine_memory": "8589934592",
				"ml.max_open_jobs": "20",
				"xpack.installed": "true"
			}
		}
		第3集 剖析elastic search的乐观锁
		简介: 剖析elastic search的乐观锁
		锁的简单分类
		悲观锁
		顾名思义, 就是很悲观, 每次去拿数据的时候都认为别⼈ 会修改, 所以每次在拿数据的时候
		都会上锁, 这样别⼈ 想拿这个数据就会阻塞, 直到它拿到锁。 传统的关系型数据库⾥ 边就⽤
		到了很多这种锁机制,⽐ 如⾏ 锁, 表锁等, 读锁, 写锁等, 都是在做操作之前先上锁。
	},
	"indices": {
		"nba": {}
	},
	"shards": [
		[{
				"state": "STARTED",
				"primary": true,
				"node": "V1JO7QXLSX-yeVI82WkgtA",
				"relocating_node": null,
				"shard": 2,
				"index": "nba",
				"allocation_id": {
					"id": "leX_k6McShyMoM1eNQJXOA"
				}
			},
			{
				"state": "STARTED",
				"primary": false,
				"node": "z65Hwe_RR_efA4yj3n8sHQ",
				"relocating_node": null,
				"shard": 2,
				"index": "nba",
				"allocation_id": {
					"id": "6sUSANMuSGKLgcIpBa4yYg"
				}
			}
		]
	]
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前⾔
  • 路由算法
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档