OrientDB的存储独占锁定究竟是什么?

时间:2015-05-05 04:29:30

标签: concurrency transactions locking orientdb

阅读了OrientDB官方文档中的以下声明:

  

为了保证原子性和一致性,OrientDB获得了一个   在事务提交期间对存储器进行独占锁定。

我想知道我对情况的理解是否正确。以下是我认为这将起作用的方式:

  1. 主题1 打开一个事务,并将记录#1:100读取到#1:200,一些来自班级A,一些来自班级B(在交易即将结束时无法确定的事情。
  2. 主题1 按摩数据,甚至可能会插入一些记录。
  3. 线程1 开始提交数据。由于数据库无法知道的哪些部分可能受到开放事务的影响,因此它将盲目地阻止整个存储单元并验证@version强制执行乐观锁定所有可能受影响的记录。
  4. 线程2 尝试读取记录#1:1(或整个数据库中的任何其他记录)并被提交过程阻止,该过程已对齐, AFAIK,存储单元上的独占锁定。如果我没有关闭,则无论原始数据驻留在哪个群集上,都会出现此块,因为我们有多个主数据集。
  5. 线程1 结束提交过程,数据库变得一致,有效解除锁定。
  6. 此时,任何线程都可以在事务或其他方面对数据集进行操作,并且不受独占锁定机制的约束。
  7. 如果是这种情况,在点 3 突出显示的交换期间,数据存储完全处于有效的恍惚状态,无法在任何地方访问,读取或与之交互有意义的方式。

    我希望我错过了我的猜测。

    免责声明:我没有机会深入研究相当丰富的OrientDB代码库中的底层代码。因此,这是一个受过良好教育的猜测,不应被视为OrientDB实际运作的任何参考。

    可能的解决方法: 应该更糟糕的是,这恰好是OrientDB实际工作的方式,我非常欢迎任何解决这个难题的工作方法。我们正在寻找有意义的方法,使OrientDB成为企业,可扩展的高端应用程序的可行选择。

0 个答案:

没有答案