跳转到主要内容

使用ir.sequence的“标准”实现,而不是“无缝”实现

项目描述

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

将所有当前序列(ir.sequence)的实现设置为“标准”,所有新序列默认创建为“标准”,而不是“无缝”实现。

“无缝”序列实现的弊端是什么?

“无缝”是Odoo中序列的默认值。然而,这类序列会导致更多锁定,并可能使数据库变慢。

以发票为例,如果您将发票号码分配给一个记录,但该过程尚未完成,则必须结束此过程,以便另一个发票可以分配新的号码,且发票号码之间没有空隙。乍一看这似乎很好。但问题在于存在连锁过程。

想象一下,有一个用户正在执行一个生成100张发票的过程,同时这100张发票还产生了100个连续的(无缝)序号。此外,这些发票还发送到外部机构进行签字(由于互联网延迟或服务器负载,可能需要2秒才能给出响应),并且他们可能还对每张发票进行了其他计算,使每张发票额外花费5秒钟,所有这些都连锁在一个单独的事务中。这意味着在8.5分钟内,任何人都不可以确认发票,也不能确认涉及期刊的期刊条目。

现在,假设有20个用户必须执行类似的过程。问题呈指数级增长。如果另一个用户尝试对相同期刊进行操作,它将引发并发失败。

您可以通过分割每一笔交易并避免将它们链接起来来减轻这种情况。这意味着,为每一张发票或流程进行提交。这降低了出现并发错误或锁等待的可能性。然而,这并不能完全解决问题。

为什么要使用“标准”实现的序列

如果您使用PostgreSQL的标准序列,它不会锁定,因为在请求完成的时刻,下一个序列号会在一个独立的交易中改变,它不需要等待其他交易结束。然而,如果交易产生回滚,这个序列不会被回滚,这意味着它丢失了。这可能并不是很严重,因为当您取消或删除记录时,这个数字也会丢失。

此模块的功能

为了完全消除并发/缓慢的问题,此模块将所有序列(ir.sequence)实现从“无间隔”更改为“标准”,意识到它将跳过数字。在大多数数据库模型和许多用户项目中,这种跳跃不会引起问题。

目录

错误追踪器

错误在GitHub Issues上跟踪。如果您遇到问题,请检查是否已经报告了您的问题。如果您是第一个发现它的人,请帮助我们通过提供详细且受欢迎的反馈来解决问题。

请不要直接联系贡献者以获取支持或技术问题的帮助。

鸣谢

作者

  • Vauxoo

贡献者

维护者

此模块由OCA维护。

Odoo Community Association

OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。

当前维护者

moylop260 ebirbe

此模块是GitHub上的OCA/server-tools项目的一部分。

欢迎您贡献。要了解如何贡献,请访问https://odoo-community.org/page/Contribute

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

此版本没有提供源分布文件。有关生成分布存档的教程,请参阅生成分布存档

构建分布

支持