OrientDB,如何检索以前的记录版本

问题描述 投票:7回答:1

我正在研究OrientDB以评估图形数据库的版本控制能力。

OrientDB中的每个记录都有一个@version属性,该属性在每次更新记录时都会增加。这表示支持版本控制。我已经建立了一个简单的示例(使用OrientDB SQL)进行测试:

create class Product
create property Product.name string
create property Product.price integer
insert into Product (name, price) values ('Fridge', 449)
update Product set price = 479 where name = 'Fridge'
select from Product

执行上面的语句后,我得到以下查询结果:

{
    "result": [
        {
            "@type": "d",
            "@rid": "#14:0",
            "@version": 2,
            "@class": "Product",
            "name": "Fridge",
            "price": 479
        }
    ],
    "notification": "Query executed in 0.031 sec. Returned 1 record(s)"
}

在此数据库状态下-如何检索记录的先前版本(在这种情况下为版本1)?通过OrientDB SQL语句和/或通过OrientDB Java API是否可以实现?如果不是,那么@version属性的用途是什么?

version-control versioning graph-databases orientdb
1个回答
13
投票

@version属性的目的是检查在提取对象与更新对象之间是否进行了任何更新。

例如,如果在您的代码中fetch一个product,您update其属性,同时数据库中的对象已更改(另一段代码已对其进行了更新) ),然后保存:您正在尝试使用版本2更新对象,但是它在数据库中具有版本3

这可以帮助您防止并发访问数据库。

我不知道您要寻找的功能是否会在OrientDB中实现。如果您不需要它,那就不要做。如果确实需要此功能,则可以自己完成操作,也许可以通过创建一个Product_old类并在更新时用以前的记录来填充它。

© www.soinside.com 2019 - 2024. All rights reserved.