在OrientDB中同时创建

时间:2014-06-30 10:22:05

标签: orientdb consistency nosql

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

我们可能会遇到两次创建单个记录的情况。以下是它的发生方式:

  • 我们有实体user_document,它们具有用户ID和文档ID - 用户和文档都在另一个应用程序中管理并存储在另一个数据库中;
  • 这个关于创建新文档的另一个应用程序发送广播事件(通过rabbit-mq主题);
  • 我们的应用程序的多个实例都会收到此消息,并使用同一对user_documentuser_id创建另一个document_id

如果我理解正确,我们应该对这些ID对使用UNIQUE索引,并依赖于分布式事务。

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

那么我们有什么机会?

例如,我们是否允许所有实例创建冗余记录,并在创建后立即选择user_iddocument_id,如果找到多个,请删除具有lexicografically higher own {{1 }}?

1 个答案:

答案 0 :(得分:0)

当然,你可以这样做。 您可以尝试使用类似

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

但是,请注意,如果不创建索引,此方法可能会占用服务器上的一些额外资源,如果 user_document 有大量记录,则可能会显着减慢。