2014-06-30 54 views
0

由於一些模糊的原因,我們正在爲我們的應用程序使用複製的orient-db。在OrientDB中同時創建

看起來很可能我們會遇到可以創建兩條記錄的情況。這是怎麼回事了:

  • 我們有實體user_document,他們的用戶名和ID的文件 - 用戶和文檔都將在另一個應用程序管理和存儲在另一個數據庫;
  • 這個創建新文檔的另一個應用程序發送廣播事件(通過rabbit-mq主題);
  • 我們的應用程序的幾個實例接收到此消息並創建另一個user_document與同一對user_iddocument_id

如果我理解正確,我們應該在這兩個id上使用UNIQUE索引,並依賴分佈式事務。

然而,由於某些原因(我們的應用程序和數據庫之間的另一支球隊writitng層),我們可能不能使用UNIQUE雖然聽起來愚蠢:)

我們有什麼機會呢?

莫非我們,例如,讓所有實例創建冗餘記錄和創建後立即通過user_iddocument_id選擇,如果不止一個人發現,隨着lexicografically更高自己id刪除的?

+0

您使用的是什麼版本?請升級到1.7.4。 – Lvca

回答

0

當然你可以這樣做。 您可以嘗試使用類似

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

然而,採取的通知,如果沒有建立索引的這種做法可能會消耗服務器上的一些額外的資源,你可能有一個顯著放緩,如果user_document有大的量的記錄。