2016-10-18 21 views
1

儘管我沒有使用Neo4j,而是使用了TitanDB(IBM Graph),但由於我是圖形數據庫的新手,因此我現在使用Neo4j文檔中建議的模式建模了一個基本的新聞源。此數據模型是否適合TitanDB中的基本新聞Feed?

http://neo4j.com/docs/snapshot/cypher-cookbook-newsfeed.html

在充分閱讀所有的文檔,我知道這些數據庫的運作方式之間的幾個關鍵差異。

在鏈接描述的模型,每一個用戶的posts被存儲作爲由edges彼此連接vertexes,形成從各user頂點發出出的狀態更新的一長列。

雖然這使得給定的Neo4j的capabalities我知道T​​itanDB具有vertex-centric索引的能力,在這裏詳細描述的感覺:

http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html

現在我想確保查詢特定用戶的進給量最佳的,有很多用戶的大圖,以及大量永久保留的帖子或狀態更新。因此,我想避免必須遍歷所有用戶朋友的所有帖子,然後才能最終訂購和限制它們,只是爲了獲得用戶Feed的前15個項目。

因此,我不能確定,如果Neo4j的文檔中描述的模型是真的TitanDB使用最好的一個,所以我的問題如下:

  • 是對Neo4j的文檔優化中描述的模型在TitanDB中快速搜索新聞提要?
  • 如果是這樣,我需要創建哪些索引才能以最佳方式檢索用戶Feed?
  • 如果沒有,我會更好每個post頂點直接連接到誰張貼的user,並在每個posted邊緣的time財產使用vertex-centric指數?

我真的在建模,索引和檢索泰坦數據庫中的基本新聞傳播的一些一般建議。提前致謝。

回答

2

雖然很難根據這個用例做出正確的判斷,但基本模式似乎並不是一種壞方法。

解決索引問題的最簡單方法可能是將標準化非常規化 - 將用戶標識作爲屬性存儲在post頂點上,並在[user, timestamp]對上創建和索引。

以頂點爲中心的索引可能對你有所幫助,但不是在建議的模型中 - 你需要將post模型化爲邊,節點爲頂點,這可能會使其他遍歷變得相當尷尬。此外,IBM Graph不支持截至當前版本的以頂點爲中心的索引。

+0

感謝Benjamin - 爲了讓我清楚,您的索引建議是否與Neo4j文檔模型一起使用?或者是否需要我通過自己的邊緣將頂點後綴直接附加到用戶頂點,而不是按照我的建議作爲鏈接列表?此外,這是一個'頂點'索引,橫跨兩個屬性(後頂點的userid和後頂點的時間戳),還是'邊緣'索引? (連接邊的時間戳)。很抱歉,如果問題看起來很平凡,Graph數據庫在概念上是相當變化的。 – gordyr

+0

對不起,我的意思是第一組括號中的以下內容:(用戶頂點中的用戶標識和帖子頂點中的時間標記) – gordyr

+0

您好,我建議您不要使用鏈表方式,而是直接使用直接邊緣。關於索引:假設您在Post頂點中包含了一個用戶標識,它將只是該元素的索引。指數不能跨越多個元素。 –