如何使用Neo4J进行临时图形计算?

问题描述:

我对Neo4J完全陌生,而且我正在努力解决设计/体系结构问题。如何使用Neo4J进行临时图形计算?

设置

我有不同的节点给定的图形。这可能是与客户,产品,项目,销售等有关的公司图表(如在电影示例https://neo4j.com/developer/get-started/中)。此图可能会不时变化。

在我的使用案例中,我想借此图表对其进行调整并测试一些场景。例如,我会添加一个新产品,定义一个负责任的新销售人员或者增加产品的价格。对于扩展图,我将“提问”或换句话说,我将使用图算法来提取信息。我所做的更改不应影响原始图形。

要求

  • 我不想写我改变原始图,因为每次原始图应该是分析的基础。也是因为改变和分析图形可以同时发生在不同的用户身上。
  • 我仍然想用Cypher的力量做出分析,因此只有在内存中的图才能做到这一点。

问题

一方面,我不想改变原有的图形,另外我想补充和临时更改信息为特定用户。使用关系型数据库我只需指向数据的“静态”部分,或者我将在代码中执行计算而不是SQL。

问题

  • 对于任何的最佳做法?
  • 我可以直接在代码中使用Cypher(非持久性,直接在存储器中的数据中)吗?
  • 我应该复制图表吗,每当我使用它(不是真的, 吧?)?
  • 是否有将用户特定数据链接到静态图的概念?

我很高兴所有的想法,概念和技巧!这更多的是关于图数据库的一般情况.... Neo4J是我的第一选择。

干杯 克里斯

如何通过使用不同的关系类型在图中使用功能标记?

例如,假设您的用户在原始图形中喜欢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

我的建议是:

  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