标签:过多 ase 连续 思想 spm 标记 数据 mon tin
分片(sharding)是MongoDB用来将大型数据集合分到散不同服务器使用的方法, 这样不需要功能强大的服务器就能够存储更多的数据和处理更大的负载. 基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移. 通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器).
使用sharding功能后, 数据会根据shard key
来把数据分割成不同的chunk放到shard服务器上. chunk(默认64M)
主要有以下功能
chunk size(64M)
时,mongodb后台进程就会触发 chunk 的分裂, 分割成更小的chunk, 防止单个chunk过大chunk在写入数据时会分裂, 在读取时不会. chunksize会影响数据的迁移速度, 如果chunksize很大, 数据分裂少, 但是迁移会很慢, 还可能出现chunk内文档数过多无法迁移(chunk 内文档数不能超过 250000)
jumbo chunk
MongoDB 默认的 chunk size 为64MB,如果 chunk 超过64MB 并且不能分裂(比如所有文档 的 shard key 都相同),则会被标记为jumbo chunk ,balancer 不会迁移这样的 chunk,从而可能导致负载不均衡
范围分片(Range based)
和hash分片(Hash based)
_id高位
是时间戳递增的分片键决定了数据会以怎样的策略进行分布, 主要有
可以结合业务特点来选择合适的分片键, 同时要注意以下
# 启用数据库分片:
sh.enableSharding("<database>")
# 使用hash分片键
sh.shardCollection('db.collection', {'field':'hashed'})
# 使用递增分片键
sh.shardCollection('db.collection', { field: 1})
# 查看分片是否成功
db.collection.stats().sharded
# 查看数据分布
db.collection.getShardDistribution()
标签:过多 ase 连续 思想 spm 标记 数据 mon tin
原文地址:https://www.cnblogs.com/zlone/p/11964850.html