如何正确递增我的 postgreSQL 数据库中的计数器



假设我想在我的应用程序中实现一个"喜欢/不喜欢"系统。我需要计算每个喜欢以便稍后进行排序。我可以简单地插入当前值 + 1 吗?我觉得这太简单了。

如果两个用户同时点击怎么办?如何防止我的柜台被打扰?

我读到我需要通过一个简单的装饰器@transaction.atomic实现交易,但我想知道这是否可以解决我的担忧。

事务旨在执行由一个用户触发的"集团"操作,而就我而言,我需要能够同时处理多个请求并安全地更新计数器。

有什么建议吗?

您可以使用 F(( 表达式,例如。

content.likes_count = F('likes_count') + 1
content.save()

因此,该操作将在数据库中执行,而不是在python中执行。

来自 django 文档。

F(( 的另一个有用好处是拥有数据库 - 而不是 比 Python - 更新字段的值可避免争用条件。

如果两个 Python 线程执行上面第一个示例中的代码,则一个 线程可以在 其他人已从数据库中检索到它。第二个的值 线程保存将基于原始值;的工作 第一个线程将丢失。

如果数据库负责更新字段,则过程是 更健壮:它只会根据 执行 save(( 或 update(( 时数据库中的字段, 而不是基于检索实例时的值。

最新更新