它是时间。时间()以编程方式在plone上创建内容类型时的安全方法?

2024-09-29 01:23:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在Plone上使用_createObjectByType。我将对象的id作为参数。在这种情况下,基于time.time()创建一个id以避免冲突安全吗?两个请求是否可以具有完全相同的时间戳,如time.time()所示?你知道吗


Tags: 对象id参数timeplone时间情况createobjectbytype
1条回答
网友
1楼 · 发布于 2024-09-29 01:23:07

这样做是非常安全的,即使在两个请求完全同时处理的情况下,如果发生冲突,ZODB将引发confliciterror并重试您的请求。你知道吗

回应以下讨论:

在一台计算机上,两个事务必须重叠(从时间。时间()在每个线程中。)ZODB是MVCC,因此每个线程都可以看到事务开始时数据库的一致视图。当第二个线程提交时,将引发冲突错误,因为它将写入自事务开始以来已更改的对象。你知道吗

如果您的客户端在多台计算机上运行,那么您需要考虑客户端之间时钟漂移的可能性。对于事务id,ZODB选择当前时间戳或上一个事务id+1中的较大者。你知道吗

但是,也许您应该考虑根本不使用时间戳作为id,因为它会导致重载下的冲突,因为所有请求都希望在同一BTree bucket中创建条目。随机选择ID将消除几乎所有的冲突,但会导致无效的B树填充。建议的方法是,每个创建对象的线程从数字空间中的一个随机点开始,依次创建id。如果它发现一个id已经被使用了,那么它应该在数字空间中随机选取另一个点并从那里重新开始。我相信佐佩·因蒂德包含此策略的实现。你知道吗

相关问题 更多 >