在 MongoDb 中,为新文档自动分配的 ID (ObjectId) 是唯一的,并且在其内部包含其创建的时间戳。
在不使用任何库(除了 Python 的内置库)的情况下,我如何创建这种简洁的唯一 ID,并且以某种方式保存其创建时间戳?
原文由 Jundiaius 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 MongoDb 中,为新文档自动分配的 ID (ObjectId) 是唯一的,并且在其内部包含其创建的时间戳。
在不使用任何库(除了 Python 的内置库)的情况下,我如何创建这种简洁的唯一 ID,并且以某种方式保存其创建时间戳?
原文由 Jundiaius 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用具有足够精度的纪元时间戳可能就足够了。将它与一个简单的用户 ID 结合起来,您将拥有一个嵌入了时间戳的唯一 ID:
import time
epoch = time.time()
user_id = 42 # this could be incremental or even a uuid
unique_id = "%s_%d" % (user_id, epoch)
unique_id
现在的值类似于 42_1526466157
。您可以获取此值并将其拆分为 _
字符 - 现在您拥有创建时间的原始纪元 (1526466157)。
原文由 Lix 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
如果你有一个多线程或多机场景,那么所有的赌注都没有了,如果只使用时间戳,你不应该依赖任何“额外级别的唯一保证”。 从 deceze 的这个优秀答案中 阅读更多内容。
与上述答案类似,另一种选择是连接时间戳和 uuid:
eventid
包含 56 个字符,这对您来说可能是问题,也可能不是问题。但是,它包含创建时间戳并且是可排序的,所有这些在数据库中都是有利的,允许您在两个时间戳之间查询eventid
s。