Postgresql Neo4j代替关系数据库

Postgresql Neo4j代替关系数据库,postgresql,web-applications,nosql,neo4j,graph-databases,Postgresql,Web Applications,Nosql,Neo4j,Graph Databases,我正在实现一个基于sinatra/rails的web门户,该门户最终可能在表/模型之间具有少多关系。这是一个单人团队和兼职但真实世界的应用程序 我与某人讨论了我的实体,并被建议尝试neo4j。来自真实的“非性感”企业世界,我倾向于使用关系数据库,直到它停止扩展或者因为切分等而成为噩梦,然后再考虑其他任何事情 但是, 我在这个项目中第一次使用postgres和datamapper,这需要我很快的开始 我只是尝试了一些东西,构建了更多的用例,所以我必须不断地更新我的模式(原型设计思想和来自测试版的

我正在实现一个基于sinatra/rails的web门户,该门户最终可能在表/模型之间具有少多关系。这是一个单人团队和兼职但真实世界的应用程序

我与某人讨论了我的实体,并被建议尝试neo4j。来自真实的“非性感”企业世界,我倾向于使用关系数据库,直到它停止扩展或者因为切分等而成为噩梦,然后再考虑其他任何事情

但是,

  • 我在这个项目中第一次使用postgres和datamapper,这需要我很快的开始
  • 我只是尝试了一些东西,构建了更多的用例,所以我必须不断地更新我的模式(原型设计思想和来自测试版的反馈)。我不必在neo4j中这样做(除了更改我的查询)
  • 使用neo4j设置搜索似乎非常容易。但Postgres也可以进行全文搜索
  • Postgres最近宣布支持json和javascript。想知道我是否应该坚持PG,投入更多的时间学习PG(它有一个很好的社区)而不是neo4j
寻找neo4j更好的用例,尤其是在项目的原型/初始阶段。我知道,如果网站发展壮大,我可能会拥有多种持久性技术,如s3、关系(PG)、mongo等

另外,了解Rails/Ruby生态系统的运行情况也很好


更新1:

我得到了很多很好的答案,现在看来正确的做法是坚持使用Postgres(特别是在我部署到heroku之后)

然而,无模式的想法很诱人。基本上,我在考虑一种方法,在您有100-150个用户并且您自己为您的产品找到了一个好的模式(业务用例)之前,您不会定义一个数据模型,而您只是演示这个概念并通过有限的注册获得反馈。然后我们可以决定一个模式,并从关系模式开始


很高兴知道是否有易于使用的模式/更少的持久性选项(基于新用户的易用性/设置),可以放弃缩放等功能。

如果数据模型非常混乱,则应考虑图形数据库。它们需要表达实体之间高度复杂的关系。为此,它们在数据级别存储关系,而RDBMS使用声明式方法。只有在这些关系非常不同的情况下,存储关系才有意义,否则最终只会重复数据,白白占用大量空间。 要在关系中要求如此多样化,您必须处理大量数据。这就是图形数据库的亮点所在,因为在进行大量连接的情况下,它们只是选择一个记录并跟踪他的关系。为了支持我的说法:你会注意到Neo4j网站上的每个人都在处理非常复杂的数据

简言之,如果你不关心我上面所说的,我认为你应该使用另一种技术。如果这仅仅是关于扩展、无模式或快速启动项目,那么看看其他NoSQL解决方案(更具体地说,是面向列或面向文档的数据库)。否则,您应该坚持使用PostgreSQL。你也可以像你所说的那样考虑,


关于你的更新,你可以考虑一下。我认为它符合你的要求。这是一个PostgreSQL模块,在Heroku上也可以使用。

我不认为只有在数据模型非常复杂时才应该使用图形数据库。我相信他们也可以处理简单的数据模型/关系

如果你之前没有Neo4j或Postgres的经验,那么很可能两者都需要相当长的时间才能学好

挑选时要记住以下几点:

  • 这不仅仅是针对数据库技术的开发。你也应该考虑部署。部署和扩展Postgres/Neo4j有多容易

  • 考虑每种技术的社区和工具。Neo4j有没有像Postgres那样的数据映射器

  • 考虑到两者的数据模型有很大不同。如果你已经可以用关系思维了,那么我可能会选择博士后。如果你使用Neo4j,你的数据模型将在几个月内犯很多错误

  • 随着时间的推移,我学会了在可能的时候保持简单。与Neo4j相比,博士后可能是一个无聊的选择,但无聊并不能让你熬夜


  • 而且我从来没有看到有人提到过它,但是你也应该看看Riak()。它是一个文档数据库,还提供对象之间的关系(链接)。不像图形数据库那样成熟,但它可以快速连接几个实体。

    最合适的选择取决于您试图解决的问题

    如果您只有几个多对多表,那么关系数据库就可以了。一般来说,对关系数据库有更好的或映射器支持,因为它们更老,并且具有标准化的接口和行-列结构。他们也已经改进了很长一段时间,所以他们是稳定的,并为他们所做的优化

    例如,如果您的问题更多地涉及实体之间的连接,则图形数据库更好,特别是如果您需要更远距离的连接,例如“检测周期(未指定长度)”,一些“朋友的朋友喜欢什么”。当仅限于SQL连接时,这类事情会变得很麻烦。一种特定于问题的语言(如Neo4j的案例)使其更加简洁。另一方面,在图形数据库和对象之间有映射器,但不是所有框架和语言都有映射器

    我最近使用neo4j实现了一个系统原型,能够讨论数据的结构和连接,能够在数据存储中一对一地建模,这非常有用。另外,在数据p之间添加其他连接