我是研究OrientDB的学术研究 . 我们应该关注的一个重要部分是ACID-paradigma .
OrienDB手册说:
OrientDB是符合ACID标准的DBMS .
它还说:
创建属性时,OrientDB会检查数据的属性和类型 . 如果持久数据包含指定类型的不兼容值,则属性创建将失败 . 它不对持久数据应用任何其他约束 .
所以外国RID不会检查是否指向现有记录?如果是这样,如果C无效,为什么Orient ACID合规?
示例:有一个类Writer和Blog,其属性为Blog.author LINK Writer . Writer中只有一条记录,RID =#12:0 .
在Relational数据库中,此插入应该发生错误:
Insert into Blog CONTENT {"author" : "#12:1"}
RID =#12:1没有记录,但OrientDBh没有出错 . 即使在使用Java API的事务中:
ODatabaseDocumentTx db = new ODatabaseDocumentTx(...);
ODocument newBlog = new ODocument("Blog");
newBlog.field("author", new ORecordId(12,1) );
try{
db.begin();
newBlog.validate();
newBlog.save();
db.commit();
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
db.rollback();
}
db.close();
}
所以我有一个很大的误解,或者为什么OrientDB ACID是否符合外国RID检查,因此存在不一致的可能性?
1 回答
这是Document API的限制,没有检查RID一致性,因为当您删除文档时,查找链接到它的所有其他文档将意味着对数据库进行完整扫描,这通常需要很长时间才能完成 . 要解决此问题,可以在应用程序级别使用双向链接或管理链接一致性 .