Firestore中日期格式的文档ID是否属于单调递增ID?
问题解答
你的日期格式文档ID属于单调递增ID,原因如下:
虽然你提到日期不一定连续,但新增文档时使用的日期必然晚于之前所有已使用的日期(按业务逻辑,不会用过去的日期新增文档),而YYYY-MM-DD的字符串排序规则和时间顺序完全一致——新的日期ID字符串会比所有旧的日期ID字符串更大,本质上还是形成了一个单调递增的序列,符合Firestore最佳实践里提到的「单调递增ID」的特征。
为什么不推荐?
Firestore作为分布式数据库,单调递增ID会导致所有写入请求集中到同一个存储分区,引发写入热点,严重影响写入性能和系统扩展性,这也是官方明确禁止使用这类ID的原因。
替代方案建议
- 直接使用Firestore自动生成的随机ID:通过
addDoc方法创建文档时,Firestore会生成分散的随机ID,天然避免热点问题。 - 将日期作为文档字段而非ID:保留日期作为查询维度,配合索引实现按日期筛选的需求,同时用随机ID保证写入性能。
- 给日期ID添加随机后缀:比如采用
2023-09-01_abc123的格式,既保留日期信息,又打破单调递增的序列,分散写入负载。
内容的提问来源于stack exchange,提问作者Always Learner
相关产品推荐
相关产品推荐

