我想建立一个社交网络。 (例如,人们有其他人作为朋友)我想图形数据库比传统数据库更好。我想在边缘和节点上存储属性。它们可以是json,但我不在乎DB是否理解JSON。
ArangoDB也可以存储文件,而Neo4J仅仅是#34;图数据库。
我希望每个人都有一个用户节点2,例如
用户 - [用户名] - >人
用户 - [ID] - >人
并且需要边缘上有索引。我不想要一个不同的数据库,所以将数据(字节数组)存储在数据库中可能会很好,甚至可能为每个图像/视频设置不同的大小。还应将帖子等存储在数据库中。
我得到的是Neo4j更好地支持独立于制造的查询语言,但我想学习制造商标准更容易也更好。有关哪种数据库管理系统更适合的建议?我将用Java(和一些Scala)编写代码。
答案 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会让人惊叹:
这个想法是一个社交网络"并不会自动暗示优势,甚至使用图表数据库(特别是自GraphQL和Falcor发布以来)。
解决有关查询语言的问题。图形数据库没有标准语言。
AQL是一种查询语言,提供统一的界面来处理键/值,文档和图形数据。
Cypher是一种图形查询语言。
Badwolf Query Language是SPARQL启发的时态图语言。
存在这些语言是因为它们解决了不同的问题。支持它们的数据库也可以解决不同的问题。
Neo4j有an example"多语言持久性"在他们的网站上:
我认为 是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