2017-06-12 45 views
2

我對Neo4J完全陌生,而且我正在努力解決設計/體系結構問題。如何使用Neo4J進行臨時圖形計算?

設置

我有不同的節點給定的圖形。這可能是與客戶,產品,項目,銷售等有關的公司圖表(如在電影示例https://neo4j.com/developer/get-started/中)。此圖可能會不時變化。

在我的使用案例中,我想借此圖表對其進行調整並測試一些場景。例如,我會添加一個新產品,定義一個負責任的新銷售人員或者增加產品的價格。對於擴展圖,我將「提問」或換句話說,我將使用圖算法來提取信息。我所做的更改不應影響原始圖形。

要求

  • 我不想寫我改變原始圖,因爲每次原始圖應該是分析的基礎。也是因爲改變和分析圖形可以同時發生在不同的用戶身上。
  • 我仍然想用Cypher的力量做出分析,因此只有在內存中的圖才能做到這一點。

問題

一方面,我不想改變原有的圖形,另外我想補充和臨時更改信息爲特定用戶。使用關係型數據庫我只需指向數據的「靜態」部分,或者我將在代碼中執行計算而不是SQL。

問題

  • 對於任何的最佳做法?
  • 我可以直接在代碼中使用Cypher(非持久性,直接在存儲器中的數據中)嗎?
  • 我應該複製圖表嗎,每當我使用它(不是真的, 吧?)?
  • 是否有將用戶特定數據鏈接到靜態圖的概念?

我很高興所有的想法,概念和技巧!這更多的是關於圖數據庫的一般情況.... Neo4J是我的第一選擇。

乾杯 克里斯

回答

3

如何通過使用不同的關係類型在圖中使用功能標記?

例如,假設您的用戶在原始圖形中喜歡10部電影。

(user)-[:LIKES]->(movies) 

然後做實驗,你可以有

(user)-[:LIKES_EXPERIMENT]->(othermovies) 

這爲您提供穿越在原始的方式曲線圖不受僅僅加強關係類型鬆動的表現的可能性。另一方面,它也爲您提供了僅使用實驗或通過在遍歷中指定兩種關係類型將原始數據與實驗結合起來的可能性。

對於屬性也是如此,你可以用experiment_爲例如前綴屬性。最後你還可以玩不同的標籤。在必須使用不同的圖形數據存儲之前,存在許多可能性。

另一種可能是使用某種版本控制這裏描述的一樣:

http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/ 但是,如果沒有時間的因素。

還爲它https://github.com/h-omer/neo4j-versioner-core

+0

我想添加一個用戶節點,新的關係必須是解決方案。我需要首先得到這種感覺......我可以回答你一些問題。非常感謝。 – user1879408

0

我的建議是:

  1. 複製原始數據庫到新位置的data foldersudo cp /path/to/original/data/folder ~/neo4j
  2. 運行一個Docker容器映射數據文件夾的副本容器數據文件夾。

事情是這樣的:

docker run \ 
--publish=7474:7474 --publish=7687:7687 \ 
--volume=$HOME/neo4j/data:/data \ 
neo4j 

如果正在使用:7474:7686您可以指定其他端口。

  1. 處理此副本。

您可以將這些指令轉換爲.sh文件以自動執行該過程。

+0

這聽起來像一個真正重量級的解決方案一個不錯的插件。想象一下,成千上萬的用戶使用該圖進行實驗。如果基礎數據發生變化呢?這不可能是最佳做法。無論如何,非常感謝這個想法。 – user1879408