我曾研究过关系数据库;但现在想了解图数据库。我才知道这两个是图形数据库。这两个数据库有什么区别。我们应该更喜欢他们什么?
4 回答
一种方法是简单地尝试选择一个数据库而不是另一个。例如,您可能会快速四处搜索,发现 Titan 已被分叉到JanusGraph并得到更积极的维护。在您的研究中,您可能会发现还有其他开源图形数据库,如OrientDb、ChronoGraph或Sqlg,以及Microsoft 的 CosmosDb、DSE Graph或IBM Graph等商业替代品。你现在怎么做决定?
有一个图框架将所有这些图联系在一起,包括 Neo4j/Titan(以及这里列出的更多):Apache TinkerPop。TinkerPop 提供了对不同图形数据库和图形处理器的抽象,允许将相同的代码用于不同的可配置后端。这种模式与您在带有 JDBC 的 SQL 中找到的模式非常相似,这有助于使您的代码供应商不可知论。
在做出选择之前,您可以尝试所有不同的受支持的图形数据库,并且可以使用Gremlin 控制台相当快速地进行这种类型的原型设计/基准测试。您将能够自行选择适合您的项目的最佳方式。
当我到这篇文章的结尾时,我突然想到我没有直接回答你的问题。如果您刚刚开始并且只是对学习图形数据库感兴趣,那么我可能不建议从 Titan/JanusGraph 开始,因为它需要一些配置才能开始(模式、后端选择等)。从 TinkerGraph 或 Neo4j开始,使用 Gremlin 控制台尝试一些简单的图遍历并从那里开始。
Titan最初由 Aurelius 提供支持,Aurelius 于 2015 年被 DataStax 收购。此举旨在让 DataStax 快速进入 Graph DB 世界,因为他们现在提供自己的“DSE Graph”企业产品。此后 Titan 被分叉(如前所述)到JanusGraph中。
Titan/Janus (IMO) 的好处在于它可以与其他现有的后端和搜索技术“插入”。因此,它将与 Cassandra、HBase、Hadoop、Solr 和 ElasticSearch 之类的东西“玩得很好”。
缺点是社区支持很难。Titan 项目已被有效扼杀,Janus 在 DBEngines 上的得分高达 0.23。这使它成为第 16 位最受欢迎的 Graph DB(总体排名第 231 位),这个比例非常低。
Neo4j得到 Neo Technology 的支持,被认为是 Graph DB 社区的领跑者(目前得分 38.52,Graph DB 第 1 名,总体第 21 名)。它是开源的,但由 Neo Technologies 控制,因此他们可以决定开源和企业之间的功能集差异。
Neo4j 的好处是他们在 Neo4j 浏览器中内置了很多教程和学习辅助工具,这是一个很好的、用户友好的 Web 界面。他们的文档是一流的,易于阅读和搜索,而且他们在 Stack Overflow 上也有很好的追随者。
Neo4j 浏览器截图:
Neo4j 的缺点是某些功能(如集群)仅在企业版中可用。但是,如果您为一家不介意花大价钱购买企业许可证的大公司工作,那可能没什么大不了的。
一致性:Titan/Janus 是“最终一致性”人群的一部分,而 Neo4j 的目标是强一致性(尤其是在因果聚类场景中)。尽管可以通过两者的配置来调整一致性,但 Titan/Janus 可能取决于您选择的可插拔后端(例如:通常与 HBase 强一致,但最终与 Cassandra 一致)。
建议:
如果您刚刚开始学习图形数据库和建模,那么Neo4j不会出错。只需下载/安装社区版,运行它,然后:play movies
作为您的第一个命令执行(指导您完成加载、建模和查询电影关系的教程)。
如果您对图形有一些经验,并且不介意进行故障排除/谷歌搜索以找出问题(例如如何为 Thrift 设置最大帧大小),那么您可能可以使用 Titan 做一些非常酷的事情。
尝试每一个,看看哪一个适合你。
图形数据库远不止两个——有几十个。话虽如此,有两个具有真正的市场份额:Neo4j 和 Titan/JanusGraph。但是还有很多其他的图数据,每个都有针对不同特定应用空间的有趣优势。话虽如此,我不会一开始就深入研究所有的利基参与者——学习图形数据库的基本概念可以通过两个主要参与者之一来完成。
Neo4j 是最成熟的,拥有最完美的安装和文档,大量的参考代码,以及来自广泛合作伙伴的支持。
Titan/JanusGraph 是下一个最受欢迎的,因为它是免费/开源的并且有非常强大的支持(例如 IBM、Google、Hortonworks、AWS 等)。最近的复杂情况是泰坦项目的领导人被收购,冻结了泰坦项目。但是社区将该项目分叉到 JanusGraph 中。因此,虽然 JanusGraph 是一个新项目,但它实际上是相同的 Titan 代码,具有比 Titan 更广泛的行业支持。
与两者相关的是用于处理图表的语言。Neo4j 使用其专有语言 Cypher,而几乎所有其他人都使用 Gremlin 和 TinkerPop 开源工具集(它是 Apache 开源项目集的一部分)。几乎所有的图形数据库,包括 Neo4j,都支持 Gremlin 和 TinkerPop。因此,例如,您可以使用 Cypher 或 Gremlin 来查询 Neo4j,尽管 Neo(和其他一些专有图形数据库供应商)支持 Gremlin 作为二等公民,可以这么说。例如,您可以从(外部)Gremlin 控制台使用 Gremlin 连接到 Neo,但不能在(非常好的)Neo4j 控制台中使用 Gremlin。
请注意,除了 Titan/JanusGraph 之外,还有许多支持 Gremlin 的图形数据库。一个非常有趣的新进入者是 Microsoft 的 Azure Cosmos DB,它是一个托管图形数据库,如果您已经使用 Azure,它会“便宜又容易”。并且有几家供应商提供托管 JanusGraph。
对于个人学习k,我会说 Neo4j 是最容易设置和学习的——你下载并运行它,然后在他们的基于 Web 的控制台上打开一个 Web 浏览器,这只需要几分钟。话虽这么说,如果您对命令行感到满意,JanusGraph 只需要半个小时就可以安装并运行起来,所以这并不太难。
对于学习概念 Neo4j 非常棒。Neo4j 的查询语言 Cypher 和 JanusGraph 的查询语言 Gremlin 在语义上是相同的,只是拼写不同,所以无论哪种方式,您都可以学习这些概念。
对于构建一个真实的系统,任何一个都可以工作(并且有很多成功的遵循这两种方法)。
对于您的选择,您需要考虑是否要在战略上与单个供应商 (Neo4j) 或更广泛的基于标准的社区联系在一起。选择具有最成熟产品的市场领导者——Neo4j 是很舒服的。选择具有强大行业支持的开放标准也很舒服——JanusGraph。因此,IMO 没有“错误”的答案——使用任何一种的人都很快乐和成功。但既然你必须选择,你需要考虑长期使用哪个更舒服。
Neo4j 使用原生图技术。
- 原生图技术通过将节点和关系写入彼此靠近的方式来确保数据的高效存储。
- 它优化了图形数据库。
- 使用原生图技术,处理变得更快,因为它使用无索引邻接。这意味着每个节点都直接引用其相邻节点。
Titan(现在的 JanusGraph)使用非原生图技术。
- 在非原生中,我们使用不同的存储后端,例如 Cassandra、HBase
- 与本机相比,非本机处理变得更慢,因为数据库使用多种类型的索引将节点链接在一起。