如何使用Neo4J进行临时图计算?
How to use Neo4J for temporary graph calculations?
我是 Neo4J 的新手,我正在努力解决 design/architecture 问题。
设置
我有一个具有不同节点的给定图。这可能是包含客户、产品、项目、销售额等的公司图表(如电影示例 https://neo4j.com/developer/get-started/)。此图可能会不时更改。
在我的用例中,我想使用这张图,对其进行调整并测试一些场景。例如我会添加一个新产品,定义一个有责任的新销售人员或提高产品的价格。对于扩展图,我将 "ask questions" 或者换句话说,我将使用图算法来提取信息。我所做的更改不应影响原始图表。
要求
- 我不想将我的更改写到原始图上,因为每次都应该以原始图作为分析的基础。同样是因为不同用户可以同时更改和分析图表。
- 我仍然想使用 Cypher 的强大功能来进行分析,所以只在内存中绘制图形是行不通的。
问题
一方面我不想更改原始图表,另一方面我想为特定用户临时添加和更改信息。使用关系数据库,我只需将 ID 指向数据的 "static" 部分,或者我会在代码中而不是 SQL 中进行计算。
问题
- 有什么最佳做法吗?
- 我可以直接在代码中使用Cypher吗(none-persistent,直接在memoty中的数据上)?
- 我是否应该在每次使用 Graph 时复制它(不是真的,
对吧?)?
- 是否有将用户特定数据 link 到静态图的概念?
我对所有想法、概念和技巧都很满意!它更多地是关于一般的图形数据库....Neo4J 是迄今为止我的第一选择。
干杯
克里斯
我的建议是:
- 复制原数据库的data folder到新位置:
sudo cp /path/to/original/data/folder ~/neo4j
- 运行一个Docker容器将数据文件夹的副本映射为容器数据文件夹。
像这样:
docker run \
--publish=7474:7474 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
neo4j
如果正在使用 :7474
和 :7686
,您可以指定其他端口。
- 修改此副本。
您可以在 .sh
文件中转换这些指令以自动执行该过程。
如何通过使用不同的关系类型在图表中使用特征标志?
例如,假设您有一个用户喜欢原始图表中的 10 部电影。
(user)-[:LIKES]->(movies)
那么对于您的实验,您可以
(user)-[:LIKES_EXPERIMENT]->(othermovies)
这为您提供了以原始方式遍历图形的可能性,而不会通过仅强制执行关系类型而降低性能。另一方面,它还为您提供了仅使用实验或通过在遍历中指定两种关系类型将原始数据与实验相结合的可能性。
属性也是如此,例如,您可以在属性前加上 experiment_
前缀。最后你还可以玩不同的标签。在必须使用不同的图形数据存储之前,有很多可能性。
另一种可能性是使用此处描述的某种版本控制:
http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/
但没有时间因素。
我是 Neo4J 的新手,我正在努力解决 design/architecture 问题。
设置
我有一个具有不同节点的给定图。这可能是包含客户、产品、项目、销售额等的公司图表(如电影示例 https://neo4j.com/developer/get-started/)。此图可能会不时更改。
在我的用例中,我想使用这张图,对其进行调整并测试一些场景。例如我会添加一个新产品,定义一个有责任的新销售人员或提高产品的价格。对于扩展图,我将 "ask questions" 或者换句话说,我将使用图算法来提取信息。我所做的更改不应影响原始图表。
要求
- 我不想将我的更改写到原始图上,因为每次都应该以原始图作为分析的基础。同样是因为不同用户可以同时更改和分析图表。
- 我仍然想使用 Cypher 的强大功能来进行分析,所以只在内存中绘制图形是行不通的。
问题
一方面我不想更改原始图表,另一方面我想为特定用户临时添加和更改信息。使用关系数据库,我只需将 ID 指向数据的 "static" 部分,或者我会在代码中而不是 SQL 中进行计算。
问题
- 有什么最佳做法吗?
- 我可以直接在代码中使用Cypher吗(none-persistent,直接在memoty中的数据上)?
- 我是否应该在每次使用 Graph 时复制它(不是真的, 对吧?)?
- 是否有将用户特定数据 link 到静态图的概念?
我对所有想法、概念和技巧都很满意!它更多地是关于一般的图形数据库....Neo4J 是迄今为止我的第一选择。
干杯 克里斯
我的建议是:
- 复制原数据库的data folder到新位置:
sudo cp /path/to/original/data/folder ~/neo4j
- 运行一个Docker容器将数据文件夹的副本映射为容器数据文件夹。
像这样:
docker run \
--publish=7474:7474 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
neo4j
如果正在使用 :7474
和 :7686
,您可以指定其他端口。
- 修改此副本。
您可以在 .sh
文件中转换这些指令以自动执行该过程。
如何通过使用不同的关系类型在图表中使用特征标志?
例如,假设您有一个用户喜欢原始图表中的 10 部电影。
(user)-[:LIKES]->(movies)
那么对于您的实验,您可以
(user)-[:LIKES_EXPERIMENT]->(othermovies)
这为您提供了以原始方式遍历图形的可能性,而不会通过仅强制执行关系类型而降低性能。另一方面,它还为您提供了仅使用实验或通过在遍历中指定两种关系类型将原始数据与实验相结合的可能性。
属性也是如此,例如,您可以在属性前加上 experiment_
前缀。最后你还可以玩不同的标签。在必须使用不同的图形数据存储之前,有很多可能性。
另一种可能性是使用此处描述的某种版本控制:
http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/ 但没有时间因素。