Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 在Neo4J中存储多个图形_Graph_Neo4j_Graph Databases - Fatal编程技术网

Graph 在Neo4J中存储多个图形

Graph 在Neo4J中存储多个图形,graph,neo4j,graph-databases,Graph,Neo4j,Graph Databases,我有一个将关系信息存储在MySQL表中的应用程序(contact_id、other_contact_id、strength、recorded_at)。如果我所需要做的只是显示联系人的关系是谁,或者甚至为两个联系人生成一个相互联系的列表,那么这很好 但现在我需要生成一些统计数据,比如:“2011年1月强度为3或更高的双向连接总数是多少”或者(假设每个联系人都是一个组的一部分)“哪个组与其他组的连接数最多”等等 我很快发现,生成这些统计数据的SQL变得非常笨拙 所以我写了一个脚本,对于任何给定的日期

我有一个将关系信息存储在MySQL表中的应用程序(contact_id、other_contact_id、strength、recorded_at)。如果我所需要做的只是显示联系人的关系是谁,或者甚至为两个联系人生成一个相互联系的列表,那么这很好

但现在我需要生成一些统计数据,比如:“2011年1月强度为3或更高的双向连接总数是多少”或者(假设每个联系人都是一个组的一部分)“哪个组与其他组的连接数最多”等等

我很快发现,生成这些统计数据的SQL变得非常笨拙

所以我写了一个脚本,对于任何给定的日期,它都会在内存中生成一个图形。然后我可以根据图表运行我想要的任何统计数据。更容易理解,一般来说,性能也更高——除了生成图形部分

我的下一个想法是缓存这些图,以便在需要运行新统计数据时调用它们(或生成更晚的图:例如,对于今天的图,我使用昨天的图并应用自昨天以来发生的任何更改)。我尝试了memcached,它工作得非常好,直到图形增长到>1MB

所以现在我考虑使用一个像Neo4J这样的图形数据库

唯一的问题是,我并没有一个图表。或者我会,但它会随着时间的推移而变化,我需要能够用不同的参考时间查询它

那么,我可以:

  • 在Neo4J中存储多个图形并分别重新检索/与它们交互?然后,我会为每个日期创建并存储单独的社交图

  • 向每条边添加有效的时间戳和从时间戳,并适当过滤图形:因此,如果我想要“五月一日”的图形,我将只跟踪“五月一日”之前创建的两个NOED之间的最新边(如果所有边都是在五月一日之后创建的,则这些节点将不会连接)

我对图形数据库非常陌生,因此任何帮助/指针/提示都将受到欢迎。

现在,您可以在单个Neo4j实例中只存储一个图形数据库,但这一个graphdb可以包含任意多个不同的子图。您只需在执行全局操作(如索引查询)时记住这一点,但在那里您可以执行包含时间戳属性的复合查询,以限制结果

一种方法是,正如您所说,向边添加时间信息以表示给定日期的图形结构,然后您可以遍历该图形的结构

参考节点在Neo4j中有不同的含义

与索引属性相比,每天使用类别节点(链接它们并聚合它们以获得更高级别的时间跨度)是对节点进行分类的更好方法。(实际上,这些是图形索引,您可以轻松地将其包含在遍历和图形查询中)

只要您只对不同的时间结构感兴趣,就不必复制节点。如果您的节点也不同(例如,更改属性,您可以复制它们,从而有效地创建不同的子图),或者在每个节点上创建仅包含更改(或完整快照,具体取决于您的要求)的历史节点连接列表

您的域听起来非常适合图形数据库。如果您有更多更详细的问题,请随时加入Neo4j。

这不是最简单的解决方案(我假设您只使用一台机器),但是如果您真的想分隔图形,您只需要记住图形是一个目录

然后,您可以创建一个动态加载程序类,该类获取所需数据库的路径,将其加载到内存中进行查询,并在得到答案后关闭它。您还可以配置一个代理服务器,并向加载程序发送两个参数:您的查询(在本例中,我假定这是一个密码查询)和要查询的数据库的路径


如果要回答大量实时查询,这是不够的。但是,如果只是为了存储和对数据集进行一些分析,它可以明确地满足您的需求。

这是一个老问题,但从Neo4j 4.x开始,您可以在同一个Neo4j服务器()中拥有不同的数据库。

阅读了一些内容后,我想知道引用节点是否是关键?我可以为每一天创建一个引用节点,然后根据它的引用节点构建当天的图表…嗨,我认为使用exntry节点来绘制图表,也许可以使用一些属性对它们进行索引,这样你不仅可以从引用节点找到它们,而且可以通过索引查找来找到它们。对子图条目节点的某些“元数据”属性进行索引是否会为您提供正确的起点?您能否了解如何在cypher查询中动态引用图数据库路径。提前感谢…邮件列表链接已断开