我正在研究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检查,那么可能会出现不一致的情况?
答案 0 :(得分:2)
这是Document API的限制,没有检查RID一致性,因为当您删除文档时,查找链接到它的所有其他文档将意味着对数据库进行全面扫描,这通常需要很长时间去完成。 要解决此问题,可以在应用程序级别使用双向链接或管理链接一致性。