社交网络建模时的 Neo4j 与 ArangoDB
Neo4j vs. ArangoDB when modeling a social network
我想建立一个社交网络。 (例如,人们有其他人作为朋友)而且我猜图数据库比经典数据库更能做到这一点。我想在边缘和节点上存储属性。它们可以是 json,但我不在乎数据库是否理解 JSON。
ArangoDB 也可以存储文档,而 Neo4J 是 "only" 图形数据库。
我想给每个人2一个用户节点,例如
Users -[username]-> person
Users -[ID]-> person
并且需要在边上有一个索引。我不想要一个不同的数据库,所以最好在数据库中存储一个图像(字节数组),甚至每个图像/视频的大小可能不同。帖子等也应该存储在数据库中。
我得到的是 Neo4j 更好地支持制造商独立查询语言,但我想学习制造商标准更容易和更好。关于哪个数据库管理系统更适合的任何建议?我将在 Java(和一些 Scala)中编写代码。
我不明白为什么要将模型名称和 ID 与用户分开?它们只是属于用户的属性。您更愿意将与其他用户的联系、帖子或喜欢等建模为链接。
例如..
(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3})
你需要人际关系指数做什么?
Neo4j 可能不是存储图像的最佳选择,但过去人们这样做过,但不幸的是视频不是。
您可以在 Java 和 Scala 中使用 Neo4j,请参阅 http://neo4j.com/developer/language-guides
HTH
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, the performance of graph database on any given query varies wildly 确实可以给您一些非常令人惊讶的结果。例如,这是来自国际的 一篇论文
Journal of Computer Science and Information Technologies 对 Neo4j 与 MySQL、Vertica 和 VoltDB 进行了比较,你会认为 Neo4j 在以下方面表现出色:
这个想法是,"social network" 不会自动暗示优势,甚至不会暗示图形数据库的使用(特别是自 GraphQL and Falcor 发布以来)。
解决您关于查询语言的问题。图数据库没有标准语言。
AQL 是一种查询语言,它为处理 key/value、文档和图形数据提供统一的接口。
Cypher 是一种图形查询语言。
Badwolf Query Language 是一种受 SPARQL 启发的时态图语言。
这些语言的存在是因为它们解决了不同的问题。支持它们的数据库也解决了不同的问题。
Neo4j 在其网站上有 an example 个 "polyglot persistence":
我认为 是 ArangoDB 和 AQL 要解决的问题,假设有可能解决这个问题而不比像 Neo4j 这样的专家差。目前看来他们 might be right.
我想建立一个社交网络。 (例如,人们有其他人作为朋友)而且我猜图数据库比经典数据库更能做到这一点。我想在边缘和节点上存储属性。它们可以是 json,但我不在乎数据库是否理解 JSON。
ArangoDB 也可以存储文档,而 Neo4J 是 "only" 图形数据库。
我想给每个人2一个用户节点,例如
Users -[username]-> person
Users -[ID]-> person
并且需要在边上有一个索引。我不想要一个不同的数据库,所以最好在数据库中存储一个图像(字节数组),甚至每个图像/视频的大小可能不同。帖子等也应该存储在数据库中。
我得到的是 Neo4j 更好地支持制造商独立查询语言,但我想学习制造商标准更容易和更好。关于哪个数据库管理系统更适合的任何建议?我将在 Java(和一些 Scala)中编写代码。
我不明白为什么要将模型名称和 ID 与用户分开?它们只是属于用户的属性。您更愿意将与其他用户的联系、帖子或喜欢等建模为链接。
例如..
(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3})
你需要人际关系指数做什么? Neo4j 可能不是存储图像的最佳选择,但过去人们这样做过,但不幸的是视频不是。
您可以在 Java 和 Scala 中使用 Neo4j,请参阅 http://neo4j.com/developer/language-guides
HTH
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, the performance of graph database on any given query varies wildly 确实可以给您一些非常令人惊讶的结果。例如,这是来自国际的 一篇论文
Journal of Computer Science and Information Technologies 对 Neo4j 与 MySQL、Vertica 和 VoltDB 进行了比较,你会认为 Neo4j 在以下方面表现出色:
这个想法是,"social network" 不会自动暗示优势,甚至不会暗示图形数据库的使用(特别是自 GraphQL and Falcor 发布以来)。
解决您关于查询语言的问题。图数据库没有标准语言。
AQL 是一种查询语言,它为处理 key/value、文档和图形数据提供统一的接口。
Cypher 是一种图形查询语言。
Badwolf Query Language 是一种受 SPARQL 启发的时态图语言。
这些语言的存在是因为它们解决了不同的问题。支持它们的数据库也解决了不同的问题。
Neo4j 在其网站上有 an example 个 "polyglot persistence":
我认为 是 ArangoDB 和 AQL 要解决的问题,假设有可能解决这个问题而不比像 Neo4j 这样的专家差。目前看来他们 might be right.