使用ir.sequence的“标准”实现,而不是“无缝”实现
项目描述
将所有当前序列(ir.sequence)的实现设置为“标准”,所有新序列默认创建为“标准”,而不是“无缝”实现。
“无缝”序列实现的弊端是什么?
“无缝”是Odoo中序列的默认值。然而,这类序列会导致更多锁定,并可能使数据库变慢。
以发票为例,如果您将发票号码分配给一个记录,但该过程尚未完成,则必须结束此过程,以便另一个发票可以分配新的号码,且发票号码之间没有空隙。乍一看这似乎很好。但问题在于存在连锁过程。
想象一下,有一个用户正在执行一个生成100张发票的过程,同时这100张发票还产生了100个连续的(无缝)序号。此外,这些发票还发送到外部机构进行签字(由于互联网延迟或服务器负载,可能需要2秒才能给出响应),并且他们可能还对每张发票进行了其他计算,使每张发票额外花费5秒钟,所有这些都连锁在一个单独的事务中。这意味着在8.5分钟内,任何人都不可以确认发票,也不能确认涉及期刊的期刊条目。
现在,假设有20个用户必须执行类似的过程。问题呈指数级增长。如果另一个用户尝试对相同期刊进行操作,它将引发并发失败。
您可以通过分割每一笔交易并避免将它们链接起来来减轻这种情况。这意味着,为每一张发票或流程进行提交。这降低了出现并发错误或锁等待的可能性。然而,这并不能完全解决问题。
为什么要使用“标准”实现的序列
如果您使用PostgreSQL的标准序列,它不会锁定,因为在请求完成的时刻,下一个序列号会在一个独立的交易中改变,它不需要等待其他交易结束。然而,如果交易产生回滚,这个序列不会被回滚,这意味着它丢失了。这可能并不是很严重,因为当您取消或删除记录时,这个数字也会丢失。
此模块的功能
为了完全消除并发/缓慢的问题,此模块将所有序列(ir.sequence)实现从“无间隔”更改为“标准”,意识到它将跳过数字。在大多数数据库模型和许多用户项目中,这种跳跃不会引起问题。
目录
错误追踪器
错误在GitHub Issues上跟踪。如果您遇到问题,请检查是否已经报告了您的问题。如果您是第一个发现它的人,请帮助我们通过提供详细且受欢迎的反馈来解决问题。
请不要直接联系贡献者以获取支持或技术问题的帮助。
鸣谢
贡献者
Moises López <moylop260@vauxoo.com>
Erick Birbe <erick@vauxoo.com>
维护者
此模块由OCA维护。
OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。
当前维护者
此模块是GitHub上的OCA/server-tools项目的一部分。
欢迎您贡献。要了解如何贡献,请访问https://odoo-community.org/page/Contribute。
项目详细信息
哈希值 for odoo12_addon_ir_sequence_standard_default-12.0.1.0.0.99.dev3-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0886fa0e4f12b6302ba6990aad70e97a2ec0c60818ba3c5d9e827af0e9ddace0 |
|
MD5 | ee3d3f260b66f698ad7448b1384e4293 |
|
BLAKE2b-256 | 496d4b44ac9b904a63c38d32faa048e9d0c5ffd4ece6e6ca570d60f43ffb5cc8 |