Neo4j与社交网络建模时的ArangoDB

时间:2016-01-31 19:36:44

标签: neo4j arangodb

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

ArangoDB也可以存储文件,而Neo4J仅仅是#34;图数据库。

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

  

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

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

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

2 个答案:

答案 0 :(得分:30)

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

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

Sarah Mei用一些关于电视节目数据的例子写了epic blog post about MongoDB。摘要摘要:

  

MongoDB的理想用例甚至比我们的电视数据还要窄。   它唯一擅长的是存储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

答案 1 :(得分:1)

我不明白为什么要分别为用户建模名称和ID?它们只是属于用户的属性。您宁愿将与其他用户,帖子或喜欢等的连接建模为链接。

e.g ..

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

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

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

HTH