【问题标题】:How to generate sequence number in python?如何在python中生成序列号?
【发布时间】:2016-03-21 03:16:08
【问题描述】:

我基本上是在尝试为我的 JSON 记录创建唯一的序列号作为 ID,然后它会转到 MongoDB。

我在一个集合中有数百条记录,应该有像“ALERT-00000000001”这样的 ID。

我希望它增加并且应该在多个执行之间同步。我是python的初学者。

所以请指导我或解释方法。提前致谢。

【问题讨论】:

  • 为什么不使用标准对象 ID?它们是独一无二的,不需要任何外部状态或同步(这意味着更可靠的唯一性)。
  • @SergioTulentsev 可以详细说明如何使用它。如果你说的是 mongodb 对象 id,我知道。在我的情况下,我不希望那样。还有其他建议吗?

标签: json mongodb python-2.7


【解决方案1】:

序列的问题是您需要存储它的状态(“最后生成的数字是什么”)。

好消息是,您可以将它们存储在 mongo 中!

db.sequences.find()
> { "_id": "alerts", "last_value": 234 }

然后您可以使用findAndModify 生成一个新值并在相同的操作中返回它(没有竞争条件,安全可靠)。

这种方法的一个缺点是您会在数据库上施加更多负载来满足这一业务逻辑。根据您的流量,与使用内置对象 ID 相比,您可能需要更强大的硬件。

【讨论】:

  • 你明白我的意思。它必须存储它的状态。是否有可能检索状态。我不想用更多的 ID 请求来加载我的数据库。
  • 嗯,状态必须在某处。您的所有员工都可以访问。你希望它持续存在。所以它必须是数据库(不一定是同一个数据库。这里Redis是一个不错的选择)
  • 所以最后我说服自己不要放入数据库。相反,我将其存储在一个简单的 JSON 文档中。在每次执行时从 JSON 文件中读取状态并在最后更新它是一种不好的做法吗?
  • @KavithaMadhavaraj:太糟糕了。不仅在单台机器上容易出现竞争条件(如果你有任何并发​​),也不能在其他机器上使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
相关资源
最近更新 更多