
# DDS分片
DDS分片是华为云文档数据库服务（Document Database Service, DDS）的核心技术之一，通过将数据集水平拆分到多个Shard节点（分片节点）中，实现数据的分布式存储和并行处理。每个Shard存储数据的一部分，通过Shard Key（分片键）决定数据的分布规则。分片技术解决了单节点存储和性能瓶颈问题，支持高并发、大规模数据场景下的扩展性需求。
#### 为什么需要DDS分片？
- **应对数据量增长**：单节点存储容量和性能有限，分片通过水平扩展提升存储和处理能力。
- **负载均衡**：避免数据热点，均匀分布读写压力到多个Shard节点。
- **高可用性**：分片结合副本集（Replica Set）机制，确保单点故障时数据不丢失且服务连续。
- **弹性扩容**：支持动态添加Shard节点，适应业务增长需求。
 
#### DDS分片的优势是什么？
华为云DDS分片通过水平扩展实现存储容量和吞吐量的线性增长，结合云原生架构提供自动分片管理、弹性扩容和故障自愈能力，大幅降低运维复杂度。具体请查看[表1]。
 表1DDS分片的优势 
| 优势类别   | 核心价值       | 说明                                                        |
|:---|:---|:---|
| 水平扩展能力 | 线性提升存储与吞吐。 | 通过增加Shard节点，实现存储容量和读写性能的线性增长，支持业务持续扩展。                    |
| 云原生优化  | 自动化运维管理。   | 提供自动分片管理、弹性扩容、故障自愈等能力，降低运维复杂度。                            |
| 性能优化   | 写多读少场景优化。  | 支持RocksDB存储引擎（4.2+版本），针对IoT日志、监控数据等写密集型场景进行优化。            |
| 灵活分片策略 | 适配多样化业务模式。 | 支持范围分片（Range Sharding）和哈希分片（Hash Sharding），可根据业务特点选择最优策略。 |
| 低运维成本  | 智能均衡与迁移。   | 自动均衡（Balancer）和Chunk迁移机制，减少人工干预，确保集群负载均衡。                 |
   
#### DDS分片的使用场景
表2DDS分片的使用场景 
| **场景类型**  | **分片策略**             | **适用场景特点**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | **优化要点**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| IoT设备日志存储 | 按设备ID（device_id）哈希分片 | - 海量设备并行写入。  - 数据按设备独立查询（如设备轨迹分析）。  - 时间敏感数据自动过期。   | - 对device_id+timestamp建复合索引。  - 启用TTL自动清理（如保留30天）。  - 使用Snappy压缩减少存储占用。            |
| 游戏行为统计    | 按用户ID（user_id）哈希分片   | - 用户行为数据离散分布。  - 高频查询用户历史行为（如成就统计）。  - 需支持用户维度聚合分析。                | - 建立user_id+action_type+timestamp复合索引。  - 配置读写分离降低主库压力。  - 设置合理Chunk大小（如64MB）避免频繁迁移。   |
| 实时监控数据    | 按时间戳（timestamp）范围分片  | - 数据按时间顺序写入。  - 需快速查询时间区间（如最近1小时指标）。  - 冷热数据分离需求显著。              | - 调整Chunk大小为128MB平衡迁移效率。  - 对时间戳字段单独索引。  - 启用压缩并设置冷数据归档策略。                         |
   
#### DDS分片的运行原理
1. **Shard Key选择策略**
   - **均匀分布**：优先选择基数大、重复值少的字段（如用户ID），确保数据在各Shard间均匀分布，避免热点瓶颈。
   
   - **查询匹配**：Shard Key需与高频查询条件强关联（如按时间范围过滤），直接路由到目标Shard，减少跨分片扫描。
    
2. **数据分布机制**
   - **分片逻辑** ：
     - 哈希分片：对Shard Key计算哈希值，按哈希范围将数据划分到不同Chunk。
     
     - 范围分片：按Shard Key的自然顺序（如时间戳、数值区间）划分Chunk。
      
   
   - **元数据管理**：Config Server持久化记录Chunk与Shard的映射关系，供路由节点快速定位。
    
3. **查询路由流程**
   - **路由节点（Mongos）作用**：解析客户端查询的Shard Key，根据Config Server的元数据确定目标Chunk所在Shard，直接转发请求。
   
   - **优化场景** ：
     - 包含Shard Key的查询：精准路由到单一Shard。
     
     - 无Shard Key的查询：广播到所有Shard，由Mongos聚合结果（性能较低）。
      
    
4. **动态均衡与迁移**
   - **Balancer监控**：自动检测各Shard的Chunk数量或数据量差异，当达到特定阈值时触发迁移任务。
   
   - **迁移流程** ：
     - 源Shard冻结待迁移Chunk的写入。
     
     - 复制数据到目标Shard，同步增量操作。
     
     - 更新Config Server元数据后解除冻结。
      
   
   - **阈值控制**：支持设置迁移时间窗口、Chunk大小阈值等，减少业务影响。
    
 
#### DDS分片的分类
表3DDS分片的分类 
| 分片类型 | 核心特点                                          | 典型适用场景                                   |
|:---|:---|:---|
| 范围分片 | 按照分片键的数值范围进行数据划分（如时间戳区间），保证相邻数据物理位置相近。        | 时间序列数据（监控日志）、需要范围查询的场景。                  |
| 哈希分片 | 基于分片键的哈希值均匀分布数据，确保数据随机分散。                     | 用户ID、设备ID等离散字段、高并发随机读写场景。                |
| 组合分片 | 通过refineCollectionShardKey添加后缀字段，支持多维度数据分布优化。 | 多条件组合查询（如customer_id+order_id）、复杂查询过滤场景。 |
   
#### DDS分片和MongoDB分片的区别
DDS分片与MongoDB分片虽然都基于MongoDB分片架构实现数据水平扩展，但DDS作为华为云托管服务，在云原生集成度、运维自动化程度和特定性能优化方面具有明显优势，更适合企业级大规模生产环境。以下是两者的简要对比[表4]：
 表4DDS分片和MongoDB分片的区别 
| **维度** | **DDS分片**                            | **MongoDB分片**                |
|:---|:---|:---|
| 云原生支持  | 提供全托管式分片集群管理，支持自动扩容、故障自愈、备份恢复等云原生能力。 | 需用户自行配置分片集群，节点维护和故障恢复依赖人工操作。 |
| 运维复杂度  | 集成自动化运维工具，包括监控告警、日志分析，大幅降低运维成本。      | 需手动备份，运维复杂度较高。               |
   
#### DDS分片的相关操作和特性
若想深入了解DDS分片的相关功能，您可以参考以下文档：
最佳实践：了解如何设置集群分片来提高数据库性能，请参阅[通过设置数据分片提升性能](https://support.huaweicloud.com/bestpractice-dds/dds_0005.html)。
删除分片：了解如何释放分片集群实例的shard节点，请参阅[删除分片](https://support.huaweicloud.com/usermanual-dds/dds_03_0163.html)。
执行分片删除操作时，任务被阻塞：排查任务阻塞的原因，并提供相应的解决方法，请参阅[删除分片进度确认与异常排查指南](https://support.huaweicloud.com/usermanual-dds/dds_03_0164.html)。
