社交网络建模时 Neo4j 与 ArangoDB

标签 neo4j arangodb

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

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

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

Users -[username]-> person
Users -[ID]-> person



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

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

最佳答案

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

可能有助于您的决策过程的一件事是认识到许多 NoSQL 数据库解决的问题比人们想象的要窄得多。

Sarah Mei 写了一条 epic blog post about MongoDB ,以一些有关电视节目的数据为例。从摘要:

MongoDB’s ideal use case is even narrower than our television data. The only thing it’s good at is storing arbitrary pieces of JSON.



我相信 Neo4j 解决了一个类似的狭窄问题,正如使用 Neo4j 的普遍性所证明的那样alongside some 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 在以下方面会很棒:
Performance comparison

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

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

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

Cypher 是一种图形查询语言。

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

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

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

Using neo4j redis and mongo together

我想那个是 ArangoDB 和 AQL 要解决的问题,假设有可能解决这个问题,而不会比 Neo4j 之类的专家更糟糕。到目前为止看起来他们might be right .

关于社交网络建模时 Neo4j 与 ArangoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35118458/

相关文章:

database - Neo4j基于具有某些属性的其他标签创建新标签

Neo4j Cypher 查找子节点没有属性值的节点

neo4j - 在 Neo4J 中使用 "id"属性是一个好习惯吗?

join - ArangoDB 链接文档

java - 如何在 Spring data neo4j 中更新节点或节点实体?

neo4j - 为什么 CREATE [relation] 在 Neo4j 中创建 2 个空节点?

java - AQL-在 Arangodb 中可以实现预期连接以及如何实现?

javascript - 如何将 Foxx 中的 json 对象数组发布到 arangodb

python - 如何通过增加单个集合中的文档数量来提高 ArangoDB 2.7 中的检索查询性能

arangodb - AQL 按 ID 数组过滤