2014-12-07 60 views
0

我在圖形數據庫(Cassandra頂部的Titan 0.5.2)中建立了一個數據集,它具有實體(由頂點表示)和兩種類型的屬性 - 實體之間的鏈接(自然由邊表示)和標量屬性像字符串或數字)。有許多屬性類型(現在大約2000),每個屬性類型總是相同的類型(即屬性P1始終是鏈接並且屬性P2始終是字符串),但是每個實體可以具有任何一組屬性,屬性可以是重複(即,實體E1可以具有三個P2值並且沒有P1值)。在圖形DB中建模值 - 頂點還是屬性?

問題是如何最好地模擬P2的標量值 - 它們是否應該是實體頂點E1的一部分?實體頂點E1和屬性頂點P2之間的邊上的屬性? E1和包含實際值的值頂點之間的邊界,標記爲P2?還有別的嗎?我主要對每個解決方案的性能考慮感興趣 - 即,在頂點或「薄」頂點上有很多屬性,但是它們中的很多和邊緣很多,會更好嗎?索引它們有什麼區別嗎? 而且我感興趣的其他方面的考慮方便查詢的,等等這樣的

的數據集是在數以千萬計的實體(但將有可能增長,可能是數億),並且每個頂點通常有大約10-20個屬性,但某些頂點可以具有更多屬性,即數百個或更多。預期的查詢可以使用任何財產,無論它存在的事實和它的價值,還可能需要計算諸如「該實體的最大P2值」或「該實體是否具有滿足一定條件的任何P2值」。查詢計劃由Gremlin類型查詢完成,但如果有幫助,則不會排除使用Titan-only功能。

回答

1

就我個人而言,我認爲將頂點屬性建模爲頂點屬性通常是最自然的。在使用泰坦的新多屬性和元屬性特徵時,這更加真實。多屬性是LIST/SET屬性,元屬性是屬性的屬性。以下是相關的文檔,充分說明這一點:

http://s3.thinkaurelius.com/docs/titan/0.9.0-SNAPSHOT/advanced-schema.html#_multi_properties

http://www.tinkerpop.com/docs/3.0.0-SNAPSHOT/#vertex-properties

您可以創建在性能頂點爲中心的指標,以使像「這個實體最大的P2值」的查詢。在性能方面,這個解決方案應該工作得很好。

http://s3.thinkaurelius.com/docs/titan/0.5.0-SNAPSHOT/indexes.html#vertex-indexes

默認情況下,泰坦將只檢索您要求的屬性(除非您特別通過query.fast-property告訴它不要),它可以將所有頂點的行內做到這一點,所以它是快。那機械師在這裏描述

http://s3.thinkaurelius.com/docs/titan/0.9-SNAPSHOT/data-model.html

你要注意的一件事是,生長失控的頂點行。你提到一個頂點可能有100個屬性,而且聽起來很好。如果你開始進入100K,那麼你可能會遇到與頂點一起工作的問題,特別是在執行OLAP操作時。

另一件需要注意的是Edge屬性與頂點不具有相同的功能。

相關問題