在MongoDB中选择一个好的片键(Shard Key)是至关重要的,因为它直接决定了集群的数据分布均衡性、写入性能以及查询效率。一旦选定,虽然新版本(5.0+)支持重新分片(Resharding),但这仍然是一个消耗巨大的操作,因此“一次选对”非常重要。 选择片键时,需要权衡三个核心指标:基数(Cardinality)、频率(Frequency)和单调性(Monotonicity)。 以下是选择好片键的详细指南: --- 一、 三大核心评估指标 1. 高基数 (High Cardinality) 定义:片键字段中包含的唯一值的数量。 原则:基数越大越好。 原因:MongoDB通过将数据切分为Chunk(数据块)来分布。如果基数太低(例如只有“男/女”两个值),那么最多只能生成几个Chunk,无论你有多少个分片服务器,数据都无法均匀分布,大部分服务器将处于空闲状态。 例子: ❌ 差: (只有 active, inactive 等几个值) ❌ 差: (只有7个值) ✅ 好:, , 2. 低频率 (Low Frequency) 定义:单个片键值在数据集中出现的重复次数。 原则:频率越...