面试题答案
一键面试分片键选择
- 选择离散性高的字段:如时间戳字段,在数据按时间顺序写入时,能均匀分布数据到不同分片。避免选择取值重复率高的字段,否则会导致数据集中在部分分片上,降低性能。
- 避免单调递增字段:像自增ID,在高并发写入时,可能会导致所有新数据都写入到一个分片,造成热点分片。如果必须使用自增ID,可以结合其他字段一起作为分片键。
- 考虑查询模式:选择经常在查询条件中出现的字段作为分片键,这样查询时可以直接定位到相关分片,减少跨分片查询的开销。
配置服务器设置
- 多台配置服务器:配置服务器保存着集群的元数据,使用多台配置服务器(通常3台)可以提高元数据的可用性和读取性能。配置服务器之间通过复制集机制保证数据一致性。
- 合理的资源分配:为配置服务器分配足够的内存、CPU和磁盘I/O资源,以应对集群规模扩大时元数据的增长和频繁读取。
- 定期维护:定期清理配置服务器中的无用元数据,优化存储结构,以保持元数据的高效访问。
分片设置
- 合理的分片数量:根据数据量和预期增长合理规划分片数量。分片过少无法充分利用集群资源,过多则会增加管理开销和跨分片查询的成本。
- 分片均衡策略:MongoDB会自动进行数据均衡,但可以通过调整均衡策略参数,如均衡窗口、数据迁移频率等,来适应不同的业务场景。例如,在业务低峰期进行数据均衡,减少对正常业务的影响。