2016-03-02 109 views
3

我發現了一些關於在relationaldocument數據庫中設置標籤系統的建議,但對於圖形/多模型數據庫沒有任何建議。在圖數據庫中存儲標籤

我想在ArangoDB中爲文檔設置標記系統(讓我們稱之爲「文章」)。我能想到的兩個明顯的方式存儲在多模式標籤(圖+文檔),數據庫就像阿朗戈:

  • 爲每篇文章文檔中的數組(文檔數據庫樣式)
  • 作爲一個單獨的文件類與每個標籤作爲獨特的文檔和邊緣連接標籤文檔到文章文檔(更接近關係數據庫式)

這些實際上是這樣做的兩個主要方法?這兩個都不是理想的。例如:

  • 如果我在每篇文章文檔中存儲標籤,我可以對標籤進行索引,據推測ArangoDB正在優化它們使用的空間。但是,我不能使用圖形功能鏈接或遍歷標籤(或者我必須單獨執行)。
  • 如果我將標記存儲爲單獨的標記文檔,那麼當我只想獲取文檔上的標記列表時,它看起來像額外的開銷(額外的查詢)。

這引出了一個明確的問題:關於後一種選擇,是否有任何簡單的方法可以自動在文檔文檔中顯示相關的「標籤」文檔?例如。有一個數組屬性,以某種方式'連接'連接的標記文檔的tag.name屬性?

一般建議也是受歡迎的。

+0

答案是否適合您?如果是的話,你能把他們最好的標記爲「接受」嗎?如果沒有,缺少什麼? – dothebart

回答

2

你已經提到了大部分可用的判定標準。也許我可以再添加一些:

文檔中的關係標籤可以使用數組索引來對它們進行過濾,這可以快速地對它們進行查詢。但是,如果您想爲該標記數組的每個項目添加評分或說明,則無法這樣做。如果要計算已標記的文檔,這可能比計算源自特定標記的所有邊緣更昂貴,或者可能找到符合搜索條件的所有標記。

多模型的一個強大之處在於,您不需要在兩種方法之間做出決定。您可以將具有屬性的標籤與文檔連接起來,並在文檔中使用相同(平面)標籤的索引數組。如果您發現所有(或大部分)查詢只使用一種方法,請嘗試轉換其餘的並刪除其他解決方案。如果這不起作用,您的應用程序只需要它們兩個。

在這兩種情況下,尋找其他標記文件可以一起在subequery完成:

LET docs=(FOR ftDoc IN FULLTEXT(articles, 'text', 'search') 
    COLLECT tags = ftDoc.tags INTO tags RETURN {tags, ftDoc}) 
LET tags = FLATTEN(FOR t IN docs[*].tags RETURN t) 
LET otherArticles = (FOR oneTag IN tags 
    FOR oneD IN articles FILTER oneTag IN oneD.tag RETURN oneD._key) 
RETURN {articles: docs, tags: tags, otherArticles: otherArticles} 
2

回答你有關,如果你的內部文件中,並沒有連接文件可以自動顯示明確的問題。我製作了一個帶有單獨標籤文檔的ArangoDB圖表,但我認真考慮將它轉換爲單個項目的屬性,因爲標籤似乎遵循屬性標準,而不是相關項目。

邁克·威廉姆森已經做了很好的博客文章如下:https://mikewilliamson.wordpress.com/2015/07/16/data-modeling-with-arangodb/

他認爲,有很多邊從一個頂點是緩慢的,這將是與邊緣與另一熱門標籤的數量的情況下頂點。