文档数据库服务 DDS-通过设置数据分片提升性能:选择合适的数据分布策略
选择合适的数据分布策略
分片集群支持将单个集合的数据分散存储在多个分片上,用户可以根据集合内文档的分片键来分布数据。
目前,主要支持两种数据分布策略,即范围分片(Range based sharding)和Hash分片(Hash based sharding),设置方式请参见4。
下面分别介绍这两种数据分布策略以及各自的优缺点。
- 范围分片
基于范围进行分片,即集群按照分片键的范围把数据分成不同部分。假设有一个数字分片键,为一条从负无穷到正无穷的直线,每一个片键的值均在直线上进行标记。可以理解为将该直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了分片键在一定的范围内的数据。
图1 数据分布示意图
如上图所示,x表示范围分片的片键,x的取值范围为[minKey,maxKey],且为整型。将整个取值范围划分为多个chunk,每个chunk(通常配置为64MB)包含其中一小段的数据。其中,chunk1包含x值在[minKey, -75]中的所有文档,每个chunk的数据都存储在同一个分片上,每个分片可以存储多个chunk,并且chunk存储在分片中的数据会存储在config服务器中,dds mongos也会根据各分片上的chunk的数据自动执行负载均衡。
范围分片能够很好的满足范围查询的需求,例如,查询x的取值在[-60,20]中的文档,仅需dds mongos将请求路由到chunk2。
范围分片的缺点在于,如果分片键有明显递增(或递减)趋势,新插入的文档很大程度上会分布到同一个chunk,从而无法扩展写的能力。例如,使用“_id”作为分片键,集群自动生成id的高位值将是递增的时间戳。
- Hash分片
根据用户的分片键值计算出Hash值(长度64bit且为整型),再按照范围分片策略,根据Hash值将文档分布到不同的chunk中。基于Hash分片主要的优势为保证数据在各节点上分布基本均匀,具有“相近”片键的文档很可能不会存储在同一个数据块中,数据的分离性更高。
图2 数据分布示意图
Hash分片与范围分片互补,能将文档随机分散到各个chunk,充分扩展写能力,弥补范围分片的不足。但所有的范围查询要分发到后端所有的分片,才能获取满足条件的文档,查询效率低。
- 文档数据库服务DDS在各行业的典型应用
- MongoDB_文档数据库服务DDS_华为云
- 文档数据库服务DDS性能调优_MongoDB性能调优_华为云
- GaussDB数据库服务_GaussDB选择分布键原则_华为高斯数据库服务
- GaussDB磁盘扩容_协调节点缩容_协调节点扩容_分片数量扩容
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB数据库扩容与缩容_Gaussdb扩容_华为gaussdb_gaussdb在线扩容
- 免费云数据库MongoDB_DDS文档数据库数据库免费_文档数据库是免费的吗
- 文档数据库服务 DDS 如何快速入门
- 文档数据库服务DDS实例类型_MongoDB实例类型_华为云