在OrientDB中并发创建

在OrientDB中并发创建,orientdb,consistency,nosql,Orientdb,Consistency,Nosql,由于一些模糊的原因,我们在应用程序中使用复制的orient db 我们可能会遇到这样的情况:一条记录可以创建两次。下面是它是如何发生的: 我们有实体用户_文档,它们有用户ID和文档ID-用户和文档都在另一个应用程序中管理,并存储在另一个数据库中; 另一个创建新文档的应用程序通过rabbit mq主题发送广播事件; 我们的应用程序的多个实例接收此消息并创建另一个具有相同用户标识和文档标识对的用户文档。 如果我理解正确,我们应该在这对ID上使用唯一索引,并依赖分布式事务 然而,由于某些原因,我们在应

由于一些模糊的原因,我们在应用程序中使用复制的orient db

我们可能会遇到这样的情况:一条记录可以创建两次。下面是它是如何发生的:

我们有实体用户_文档,它们有用户ID和文档ID-用户和文档都在另一个应用程序中管理,并存储在另一个数据库中; 另一个创建新文档的应用程序通过rabbit mq主题发送广播事件; 我们的应用程序的多个实例接收此消息并创建另一个具有相同用户标识和文档标识对的用户文档。 如果我理解正确,我们应该在这对ID上使用唯一索引,并依赖分布式事务

然而,由于某些原因,我们在应用程序和数据库之间有另一个团队编写层,我们可能无法使用UNIQUE,尽管它听起来可能很愚蠢:

那么我们的机会有多大


例如,我们是否可以允许所有实例创建冗余记录,并在创建后立即按用户id和文档id进行选择,如果找到多个,则删除其自身id在词汇上较高的记录?

当然可以这样做。 你可以试着使用类似

DELETE FROM (SELECT FROM user_document where user_id=? and document_id=? skip 1)

但是,请注意,如果不创建索引,这种方法可能会消耗服务器上的一些额外资源,并且如果用户文档有大量记录,则可能会大大降低速度。

您使用的是什么版本?请升级到1.7.4。