使用NoSQL数据库有什么好处?我最近已经阅读了很多关于它们的内容,但是我仍然不确定为什么我要实现它,在什么情况下我想要使用它.
关系数据库强制执行ACID.因此,您将拥有基于模式的面向事务的数据存储.它已被证明适用于99%的实际应用.您几乎可以对关系数据库执行任何操作.
但是,当涉及到大规模高可用性数据存储时,速度和扩展方面存在限制.例如,谷歌和亚马逊在大数据中心存储了数TB的数据.由于RDBM的阻塞/架构/事务性质,在这些场景中查询和插入不具备性能.这就是他们实现自己的数据库(实际上是键值存储)以实现大规模性能增益和可扩展性的原因.
NoSQL数据库已经存在了很长时间 - 只是这个术语是新的.一些示例是图形,对象,列,XML和文档数据库.
对于你的第二个问题:可以在同一个网站上同时使用它们吗?
为什么不?两者都有不同的用途吗?
NoSQL解决方案通常用于解决关系数据库不适合使用的问题,使用起来太昂贵(如Oracle)或要求您实现破坏数据库关系性质的东西.
优点通常特定于您的使用,但除非您在RDBMS中对数据建模存在某种问题,否则我认为没有理由选择NoSQL.
我自己使用MongoDB和Riak来解决RDBMS不可行的特定问题,对于我使用MySQL(或SQLite进行测试)的所有其他事情.
如果你需要一个NoSQL数据库,你通常知道它,可能的原因是:
客户希望在高流量网站上获得99.999%的可用性.
您的数据在SQL中没有意义,您发现自己正在进行多个JOIN查询以访问某些信息.
如果您打破了关系模型,那么您就拥有存储非规范化数据的CLOB,并生成外部索引来搜索该数据.
如果您不需要NoSQL解决方案请记住,这些解决方案并不是RDBMS的替代品,而是前者失败的替代方案,更重要的是它们相对较新,因此它们仍然存在很多错误缺少功能.
哦,关于第二个问题,将任何技术与另一个技术结合使用是完全没问题的,所以只要他们不在同一台机器上就可以完成我的经验MongoDB和MySQL一起工作.
Martin Fowler有一个很棒的视频,可以很好地解释NoSQL数据库.该链接直接告诉他使用它们的原因,但整个视频包含了很好的信息.
您拥有大量数据 - 特别是如果您无法将其全部放在一台物理服务器上,因为NoSQL的设计可以很好地扩展.
对象关系阻抗不匹配 - 您的域对象不适合在关系数据库模式中.NoSQL允许您将数据保存为文档(或图形),这些文档可以更紧密地映射到您的数据模型.
NoSQL是数据库系统,其中数据被组织到文档(MongoDB),键值对(MemCache,Redis),图形结构形式(Neo4J)中.
也许这里有可能的问题和答案"何时去NoSQL":
需要灵活的架构或处理树状数据?
通常,在敏捷开发中,我们开始设计系统而不需要预先了解所有需求,后来在整个开发过程中,数据库系统可能需要适应频繁的设计更改,展示MVP(最小可行产品).或者您正在处理本质上是动态的数据模式.例如,系统日志,非常精确的示例是AWS cloudwatch日志.
数据集庞大/大?
是NoSQL数据库是数据库需要管理数百万甚至数十亿条记录而不影响性能的应用程序的最佳选择.
在扩展一致性之间权衡
与RDMS不同,NoSQL数据库可能会在这里和那里丢失小数据(注意:概率是.x%),但它在性能方面很容易扩展.示例:这可能适用于存储即时消息应用程序中的联机人员,数据库中的令牌,记录网站流量统计信息.
执行地理定位操作:MongoDB散列支持执行GeoQuerying和Geolocation操作.我真的很喜欢MongoDB的这个功能.
简而言之,MongoDB非常适合可以大规模存储动态结构化数据的应用程序.