2015-09-18 48 views
0

也許這可能是由於糟糕的設計,所以任何意見將不勝感激。在OrientDB上查詢期間,我可以訪問對象的羣集名稱嗎?

我得到了一個圖形數據庫,可以幫助我基於繼承的對象模型關聯,例如

class:Element <----- class:Car 

所以,如果我得到一個新的汽車,我只是將它插入汽車類

後來我爲了實現這一目標,我們添加了需求,保留「元模型」或明星進入模型的所有數據,同時爲用戶保留數據分離,我決定每個用戶的數據應該分別設置的集羣。

因此,如果personA試圖在汽車內插入某些東西,系統將自動創建新的集羣,並將該元素放在正確的集羣上。

class:Element <----- class:Car ------ cluster:personA_Car 

該模型對關係和其他類型的元素應用相同。

在同一級別的車上:汽車,居住在其他將要與汽車相關的類中,例如割草機,自行車,所有這些類都是動態創建的,以及數據和關係的集羣。底線,模型看起來像一棵樹,其中使用關係,我關聯不同類型的對象,並區分從用戶A到用戶B,我使用羣集,但是當查詢我只有羣集的前綴時名稱,但我的根元素所在的實際羣集對我而言未知。

一概而論,我需要找到一種方法,能夠做這樣的事了的人物:

select * from Element e where in.in.size() is null (and 'e' resides on cluster starting with personA) 

除了做對orientEngine第一部分,和編碼第二部分以獲取集羣名稱,並得到正確的,是否有另一種更好的方法?

回答

1

答案從orientDb團隊收到:

嗨卡米洛,

在這個階段是沒有辦法訪問,在查詢內部羣集名稱。您可以定義一個自定義JavaScript函數,該函數根據記錄(使用本機API)檢索羣集名稱,然後在查詢中使用此函數。 無論如何,每個用戶使用集羣的想法可能會導致一些問題:在當前版本中,每個數據庫最多有32000個集羣,所以您可能會用完集羣。 我建議你採取不同的策略,例如。添加一個用戶實體並將其與您的元素記錄鏈接起來。這樣,你的查詢將是直線前進

原帖 https://groups.google.com/forum/#!searchin/orient-database/Can $ 20I $ 20access $ 20Cluster $ 2FS $ 20name $ 20for $ 20objects $ 20during $ 20A $ 20query /方位數據庫/ YvKaRLeHWqI/A78ZIkBABQAJ

1

雖然不能在查詢中完成,它被內置到Java API中。對getClusterIdByName的調用只是在OrientDB Java API使用的ConcurrentHashMap中查找類/表名稱。

+0

謝謝,但實際上這個「奇怪」的要求讓我意識到設計上有一個錯誤。但在其他任何情況下,您的代碼都是正確的解決方法。 –

相關問題