关系型数据库和非关系型数据库 对比

Posted dy9776

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关系型数据库和非关系型数据库 对比相关的知识,希望对你有一定的参考价值。

1.传统的SQL数据库有3个缺点

    • 许可费用昂贵
    • 不能自动Sharding
    • 严格的Schema
 

2.

    关系型数据库和非关系型数据库在使用场景上差别比较大,所以并不存在孰强孰弱,只有结合自身的业务特点才能发挥出这两类数据库的优势,下面说说这两类数据库的一些特点:
首先一般非关系型数据库是基于CAP模型,而传统的关系型数据库是基于ACID模型的


1. 数据存储结构:
    首先关系型数据库一般都有固定的表结构,并且需要通过DDL语句来修改表结构,不是很容易进行扩展,而非关系型数据库的存储机制就有很多了,比如基于文档的,K-V键值对的,还有基于图的等,对于数据的格式十分灵活没有固定的表结构,方便扩展,因此如果业务的数据结构并不是固定的或者经常变动比较大的,那么非关系型数据库是个好的选择

2. 可扩展性
    传统的关系型数据库给人一种横向扩展难,不好对数据进行分片等,而一些非关系型数据库则原生就支持数据的水平扩展(比如mongodb的sharding机制),并且这可能也是很多NoSQL的一大卖点,其实象mysql这种关系型数据库的水平扩展也并不是难,即使NoSQL水平扩展容易但对于向跨分片进行joins这种场景都没有什么太好的解决办法,不管是关系型还是非关系型数据库,解决水平扩展或者跨分片Joins这种场景,在应用层和数据库层中间加一层中间件来做数据处理也许是个好的办法

3. 数据一致性
    非关系型数据库一般强调的是数据最终一致性,而不没有像ACID一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果你的业务对于数据的一致性要求很高,那么非关系型数据库并不一个很好的选择,非关系型数据库可能更多的偏向于OLAP场景,而关系型数据库更多偏向于OLTP场景

 (

OLAP

联机分析处理 (OLAP--online analytical procession) 允许以一种称为多维数据集的多维结构访问来自商业数据源(如数据仓库)的经过聚合和组织整理的数据。OLAP会为关系数据库带来3个优点:持续的快速响应,基于元数据的查询及电子表格样式的公式。主要优点是能够提前计算数值,这样就能快速地呈现报表。OLAP工具通常分为两种基本基本模式:电子表格模型和数据库模型。

)

 

3.总结的九点NoSQL与RDBMS的区别联系非常不错

  1. 理解ACIDBASE的区别(ACID是关系型数据库强一致性的四个要求,而BASE是NoSQL数据库通常对可用性及一致性的弱要求原则,它们的意思分别是,ACID:atomicity, consistency, isolation, durability;BASE:Basically Available, Soft-state, Eventually Consistent。同时有意思的是ACID在英语里意为酸,BASE意思为碱)(基本可用,软状态,最终一致)
  2. 理解持久化与非持久化的区别。这么说是因为有的NoSQL系统是纯内存存储的。
  3. 你必须意识到传统有关系型数据库与NoSQL系统在数据结构上的本质区别。传统关系型数据库通常是基于行的表格型存储,而NoSQL系统包括了列式存储(Cassandra)、key/value存储(Memcached)、文档型存储(CouchDB)以及图结构存储(Neo4j)
  4. 与传统关系数据库有统一的SQL语言操作接口不同,NoSQL系统通常有自己特有的API接口。
  5. 在架构师上,你必须搞清楚,NoSQL系统是被设计用于成百上千台机器的集群中的,而不是共享型数据库系统的架构。
  6. 在NoSQL系统中,可能你得习惯一下不知道你的数据具体存在何处的情况。(习惯于可能不舒服的认识,你不知道数据的生命(大部分时间))
  7. 在NoSQL系统中,你最好习惯它的弱一致性。”eventually consistent”(最终一致性)正是BASE原则中的重要一项。比如在Twitter,你在Followers列表中经常会感受到数据的延迟。
  8. 在NoSQL系统中,你要理解,很多时候数据并不总是可用的。(习惯数据可能不总是可用的事实)
  9. 你得理解,有的方案是拥有分区容忍性的,有的方案不一定有。

原文:

Here’s their list of things to know:

  1. Understand how ACID compares with BASE (Basically Available, Soft-state, Eventually Consistent)
  2. Understand persistence vs non-persistence, i.e., some NoSQL technologies are entirely in-memory data stores
  3. Recognize there are entirely different data models from traditional normalized tabular formats: Columnar (Cassandra) vs key/value (Memcached) vs document-oriented (CouchDB)  vs graph oriented (Neo4j)
  4. Be ready to deal with no standard interface like JDBC/ODBC or standarized query language like SQL; every NoSQL tool has a different interface
  5. Architects: rewire your brain to the fact that web-scale/large-scale NoSQL systems are distributed across dozens to hundreds of servers and networks as opposed to a shared database system
  6. Get used to the possibly uncomfortable realization that you won’t know where data lives (most of the time)
  7. Get used to the fact that data may not always be consistent; ‘eventually consistent’ is one of the key elements of the BASE model (I see this latency issue all the time in Twitter, in ‘Followers’ list)
  8. Get used to the fact that data may not always be available
  9. Understand that some solutions are partition-tolerant and some are not

These attributes vary from one system to another. It’s as important to understand the differences among NoSQL technologies as it is important to understand how they differ from a traditional RDBMS.

Here is a pretty good list of the many NoSQL products, from a respected member of the community, Alex Popescu.

 

 

4.MongoDB中的一些坑( 2.4.10 版本) 

http://www.cnblogs.com/nucdy/p/7871973.html

  A.CouchDB使用的开发语言为Erlang,遵循Apache许可,使用HTTP/REST协议。主要优点是可保持数据一致性和易用性,同时允许多站部署。CouchDB主要适用于积累性的、并且较少改变数据的应用。例如CRM、CMS systems等。

  B.Redis使用的开发语言为C/C++,遵循BSD许可,使用Telnet-like协议。主要优点是速度极快。Redis主要适用数据集数据时常变化的应用。但内存占用较大。主要应用于金融机构、实时分析、实时数据收集、实时通信等。

  C.MongoDB使用的开发语言为C++,遵循AGPL(Drivers:Apache),使用Custom,binary(BSON)协议。MongoDB适用于动态查询、且定义索引比Map/Reduce效能更佳的地方。不过与CouchDB一样其数据变动较多,需要大容量磁盘。MongoDB可在任何Mysql/PostgreSQL的环境下使用.

  D.Cassandra使用的开发语言是Java,遵循Apache,使用Custom,binary(Thrift)协议。Cassandra适用于写入多于查询的场合,例如银行和金融行业等需要实时数据分析的行业。

  E.Riak使用的开发语言是Erlang & C、javascript。遵循Apache,使用HTTP/REST协议。Riak具有高容错性的特点。Riak和Cassandra非常相似。当需要高扩展性和高容错性时Riak是不错的选择。但多站点的部署需要付费。Riak适用于销售数据录入、工控系统等一些不允许宕机的场合。

  F.HBase使用的开发语言为Java,遵循Apache,使用HTTP/REST协议。HBase可支持高达数十亿的列。如果你喜爱BigTable并且需要一个能提供随机实时读写访问你海量数据的数据库,HBase是不错的选择。HBase现被Facebook邮件数据库所使用。

 

以上收集与网络,作为学习之用。

以上是关于关系型数据库和非关系型数据库 对比的主要内容,如果未能解决你的问题,请参考以下文章

关系型数据库和非关系型数据库的区别(3种)及应用场景

关系型数据库和非关系型数据库的区别(3种)及应用场景

关系型数据库和非关系型数据库的区别

MongoDB系列之SQL和NoSQL的区别

MongoDB系列之SQL和NoSQL的区别

关系型和非关系型数据库的区别