neo4j 或 neo4j+mysql 用于部分图数据集

Posted

技术标签:

【中文标题】neo4j 或 neo4j+mysql 用于部分图数据集【英文标题】:neo4j or neo4j+mysql for partial graph dataset 【发布时间】:2013-10-14 20:09:51 【问题描述】:

尽管我在这里阅读了另一个建议不要同时使用 neo4j 和 mysql (neo4j - graph database along with a relational database?) 的问题,但我想知道哪种方法最适合具有可以像图形一样建模的数据的数据集,其余看起来相关的。由于某些原因,我无法发布我正在使用的数据类型。

我可以将关系部分硬塞到 neo4j 中,但它看起来既丑陋又复杂,这是我想避免的。

另一方面,如果我同时使用两者,我将不得不进行双倍的查询才能获得结果,从而降低性能(假设数据库位于不同机器上的云中)。

我不能单独使用 mysql,因为其中一个查询需要大约 20-30 的深度,我认为 mysql 无法处理。

你们有没有遇到过这样的情况?如果有,你是怎么解决的?

【问题讨论】:

两个 dbs 听起来像是一场噩梦。你能重构关系僵硬以类似 neo4j 的方式工作吗?我不是在说图形,我说的是像其他 nosql 数据库一样以文档为中心,例如 mongo。 Neo4j 的工作方式几乎相同,但最重要的是图形功能。 好消息是我还没有开始,所以不需要任何重构:)。 mongo 在图形功能方面与 neo4j 相比如何?具体来说,它是否非常适合 30 个节点的 DFS? Mongo 没有任何图形功能。我想说的是,如果这是您需要做的,您可以在 neo4j 的 mongo 中做所有可以做的事情。 (存储文档并索引它们的字段)。我的意思是,如果您可以将关系存储重构为文档存储,那您就可以了。您可以在文档存储中建立关系。 这涉及在 mongo 中建模一对多关系,但同样适用于 neo4j。 docs.mongodb.org/manual/tutorial/…(那里有其他关系类型的文章) 很好,但性能是该项目的重中之重,同时易于编程/使用。从你所说的,听起来我必须自己构建“图形功能”部分,不是吗? 【参考方案1】:

正如其他人所说:“让我们更好地了解您要建模的数据,以便我们可以最好地为您提供建议”。

话虽如此,处理 2 个 DB 不是问题,而且比人们想象的更常见:通常您使用全文存储进行搜索,然后返回文档 ID 列表,然后点击关系用于附加元数据的数据库。或者点击 Redis 以获取 ID 列表,您还可以点击关系数据库获取更多数据。

我验证了一个 Neo4j+MySQL 系统,用于基于您的社交网络进行有针对性的搜索(“显示我的网络推荐的所有餐厅,按深度排序(例如,1 级好友推荐的权重高于 2 级,以及以此类推),并没有感到尴尬。但我也没有把它按比例放大。

您将不得不使两个数据存储保持同步。因此,在我的情况下,当用户在 Web 应用程序上推荐一个位置(将其插入 MySQL)时,您需要转身并在 Neo 中执行相同的插入操作。您可能也希望异步执行此操作,因此您需要使用工作人员设置消息队列。

【讨论】:

“您可能也希望异步执行此操作”。 Node.js 对它有好处,不是吗? @user2103008 可能,但不一定。

以上是关于neo4j 或 neo4j+mysql 用于部分图数据集的主要内容,如果未能解决你的问题,请参考以下文章

2021/8/28-最新教程Windows 安装配置Neo4j图数据库

想问一下图数据库neo4j和spark下面的graphx有啥区别

Linux安装Neo4j图数据库

Neo4j - Neo4j概述

NEO4J安装与配置

Neo4j 第一篇:在Windows环境中安装Neo4j