n.p*_*nov 5 database sharding mongodb
Mongo DB通过将每个分片与区域相关联并根据分片键值应用区域块范围来支持分区分片(如此处所述)。sh.addShardTag(<shard name>, "ZONENAME")
sh.addTagRange()
问题是:
sh.addTagRange()
吗?例如可以有 60000 个标签范围,还是设计成几十个?
在文档和社区论坛中找不到答案
提供有关用例的更多上下文:
例如,系统中有 10K 个帐户。有分片inventory
集合。每个项目都与inventoryClass
(80K 类型)相关联。每个帐户都会创建大量不同类型的库存商品 (SKU)。分片集群中有 3 个区域。分片键是:{accountId: 1, inventoryClass: 1}
。目标:为特定帐户列表(手动为帐户定义家庭区域)进行区域分配。例如帐户
[1, 294, 906847 ...] -> zone "A",
[7879079, 852 ...] -> zone "B",
[3457, 45...] -> zone "C"
Run Code Online (Sandbox Code Playgroud)
库存项目文档本身不包含区域映射的显式值(仅隐式关系accountId
-> 区域映射)。这意味着每个accontId
数据必须通过添加相应的标签范围与sh.addShardTag()
例如
sh.addTagRange(
"inventory",
{ "accountId" : 1, "inventoryClass" : MinKey },
{ "accountId" : 1, "inventoryClass" : MaxKey },
"A")
....
sh.addTagRange(
"inventory",
{ "accountId" : 294, "inventoryClass" : MinKey },
{ "accountId" : 294, "inventoryClass" : MaxKey },
"A")
Run Code Online (Sandbox Code Playgroud)
这样每个 1 个帐户就有 1 个标签范围。它导致标签范围==帐户计数