【问题标题】:Neo4j vs. ArangoDB when modeling a social network社交网络建模时的 Neo4j 与 ArangoDB
【发布时间】:2016-05-09 04:35:44
【问题描述】:

我想建立一个社交网络。 (例如,人有其他人作为朋友),我想图形数据库会比经典数据库做得更好。我想将属性存储在边缘和节点上。它们可以是 json,但我不在乎数据库是否理解 JSON。

ArangoDB 也可以存储文档,而 Neo4J“只是”一个图形数据库。

我希望每个人都有一个用户节点 2 例如。

用户 -[用户名]-> 个人
用户 -[ID]-> 人

并且需要在边缘有一个索引。我不想要一个不同的数据库,所以最好在数据库中存储一个图像(字节数组),甚至每个图像/视频的大小可能不同。帖子等也应存储在数据库中。

我得到的是 Neo4j 更好地支持制造商独立查询语言,但我想学习制造商标准更容易更好。关于哪种数据库管理系统更适合的任何建议?我将用 Java(和一些 Scala)编写代码。

【问题讨论】:

  • Cypher 正在成为一项开放的工作,请参阅 opencypher.org

标签: neo4j arangodb


【解决方案1】:

我不明白您为什么要与用户分开建模名称和 ID?它们只是属于用户的属性。您更愿意将与其他用户的连接、帖子或点赞等建模为链接。

例如..

(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3})

你需要什么关系索引? Neo4j 可能不是存储图像的最佳选择,但人们过去曾这样做过,但不幸的是视频不是。

您可以在 Java 和 Scala 中使用 Neo4j,请参阅 http://neo4j.com/developer/language-guides

HTH

【讨论】:

  • 嗨,这背后的想法是没有用户,这与所有 (n) 个用户都有关系。 (m) > n 的最大值的个数。如果 n 很大,我仍然需要快速获取用户节点。我不希望它的复杂度为 n,我希望它的复杂度为 m 的位数。与用户名相同。具有树结构的索引非常适合。如果您有 100 万用户,我不知道您的查询速度会有多快。我希望这个解释看起来是合理的。
【解决方案2】:

ArangoDB 和 Neo4j 都能够完成您想要的工作。 这两个项目都有令人惊叹的文档,并且很容易获得其中任何一个的答案。两者都可以从 Java 中使用(尽管 Neo4j can be embedded)。

认识到许多 NoSQL 数据库解决的问题比人们理解的要窄得多,这可能有助于您的决策过程。

Sarah Mei 写了一个epic blog post about MongoDB,使用了一个包含一些电视节目数据的示例。摘自:

MongoDB 的理想用例甚至比我们的电视数据还要窄。 它唯一擅长的是存储任意 JSON 片段。

我相信 Neo4j 解决了一个类似的狭窄问题,正如使用 Neo4j alongsidesome other 数据存储的普遍性所证明的那样。

我不知道在 ArangoDB 或 Neo4j 中存储图片或视频数据是一个好主意。我希望将其存储在其他服务器(如 S3)上,并将 URL 保存到 Neo4j/Arango 中的该文件中。

虽然it is possible to create queries that only a graph database can answer 确实如此,但图形数据库在任何给定查询varies wildly 上的性能都可以给您一些非常令人惊讶的结果。例如,a paper from the International Journal of Computer Science and Information Technologies 比较了 Neo4j 与 MySQL、Vertica 和 VoltDB 的查询,您会认为 Neo4j 在以下方面会很棒:

这个想法是,“社交网络”不会自动暗示优越性,甚至不会使用图形数据库(尤其是在 GraphQLFalcor 发布后)。

解决您关于查询语言的问题。图数据库没有标准语言。

AQL 是一种查询语言,它为处理键/值、文档和图形数据提供了统一的界面。

Cypher 是一种图形查询语言。

Badwolf Query Language 是一种受 SPARQL 启发的时态图语言。

这些语言的存在是因为它们解决了不同的问题。支持它们的数据库也解决了不同的问题。

Neo4j 在他们的网站上有 an example 的“多语言持久性”:

我认为 是 ArangoDB 和 AQL 想要解决的问题,假设是可以解决这个问题而不会比 Neo4j 等专家更差。到目前为止,他们看起来像might be right

【讨论】:

  • 这是一个很好的答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2010-11-29
  • 2011-05-09
相关资源
最近更新 更多