何时应该使用NoSQL数据库而不是关系数据库? 可以在同一个网站上使用两者吗?

使用NoSQL数据库有什么好处? 我最近读了很多关于它们的内容,但是我仍然不确定为什么要实现它,在什么情况下我想要使用它。

关系数据库强制执行ACID 。 所以,你将有基于模式的面向事务的数据存储。 它已被certificate适用于99%的真实世界应用。 你几乎可以用关系数据库做任何事情。

但是,在大规模高可用性数据存储方面,速度和扩展方面存在限制。 例如,谷歌和亚马逊在大数据中心存储了数TB的数据。 由于RDBM的阻塞/模式/事务性质,查询和插入在这些场景中不是高性能的。 这就是为什么他们实现了自己的数据库(实际上是键值存储),以获得巨大的性能提升和可伸缩性。

NoSQL数据库已经存在了很长时间 – 只是这个词是新的。 一些例子是graphics,对象,列,XML和文档数据库。

对于你的第二个问题:在同一个网站上同时使用这两个可以吗?

为什么不? 两者都有不同的目的吗?

NoSQL解决scheme通常意味着解决一个问题,即关系数据库要么不太适合使用(如Oracle),要么执行一些破坏数据库关系特性的东西。

优点通常是特定于您的使用情况,但是除非您在RDBMS中对数据进行build模时遇到某种问题,否则没有理由selectNoSQL。

我自己使用MongoDB和Riak来处理RDBMS不是一个可行的解决scheme,对于我使用MySQL(或SQLitetesting)的其他所有东西。

如果你需要一个NoSQL的数据库你通常知道,可能的原因是:

  • 客户希望在高stream量网站上有99.999%的可用性。
  • 你的数据在SQL中没有意义,你会发现自己正在执行多个JOIN查询来访问某些信息。
  • 您打破了关系模型,您有CLOB存储非规格化数据,并且您生成外部索引来search数据。

如果您不需要NoSQL解决scheme,请记住,这些解决scheme并不意味着作为RDBMS的替代品,而是作为前者失败的替代scheme,更重要的是它们相对较新,因此它们仍然存在大量的bug缺less的function。

呵呵,关于第二个问题,将任何技术与另一个技术结合使用是完全正确的,所以我的经验是完整的,只要MongoDB和MySQL不在同一台机器上

Martin Fowler有一个很好的video ,可以很好地解释NoSQL数据库。 链接直接到他使用它们的理由,但整个video包含良好的信息。

  1. 你有大量的数据 – 特别是如果你不能在一台物理服务器上安装所有的数据,就像NoSQLdevise的那样。

  2. 对象关系阻抗不匹配 – 您的域对象不适合在一个相关的数据库模式中。 NoSQL允许您将数据保存为可能与您的数据模型更加紧密映射的文档(或图表)。

NoSQL是将数据组织到文档(MongoDB),键值对(MemCache,Redis),图结构forms(Neo4J)中的数据库系统。

也许这里是可能的问题和答案“什么时候去NoSQL”:

  1. 要求灵活的模式或处理树状数据?
    一般来说,在敏捷开发中,我们开始devise系统而不知道所有需求,在整个开发数据库系统后期可能需要适应频繁的devise更改,展示MVP(最小可行产品)。 或者你正在处理本质上是dynamic的数据模式。 例如系统日志,非常精确的例子就是AWS cloudwatch日志。

  2. 数据集很大/很大?
    是NoSQL数据库是数据库需要pipe理数百万甚至数十亿条logging而不影响性能的应用程序的更好select。

  3. 衡量一致性之间的权衡
    与RDMS不同的是,NoSQL数据库可能会在这里和那里丢失小数据(注:概率为.x%),但在性能方面很容易扩展。 例如:这可能适用于存储即时消息应用程序中的在线人员,db中的令牌,logging网站stream量统计信息。

  4. 执行地理定位操作:MongoDB对做GeoQuerying&Geolocation操作提供丰富的支持。 我真的很喜欢MongoDB的这个function。

简而言之,MongoDB非常适合可以大规模存储dynamic结构化数据的应用程序。

我在find有说服力的理由偏离RDBMSdevise的同时,遇到了这个问题。

朱利安·布朗(Julian Brown)有一个伟大的职位 ,阐明了分布式系统的约束。 这个概念被称为布鲁尔的CAP定理,总结如下:

分布式系统的三个要求是:一致性,可用性和分区容量(简称CAP)。 但是你一次只能有两个。

这就是我为自己总结的:

如果一致性是你所牺牲的,你最好去NoSQL。