关系型数据库和⾮关系型数据库对⽐
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. 理解与的区别(ACID是关系型数据库强⼀致性的四个要求,⽽BASE是NoSQL数据库通常对可⽤性及⼀致性的弱要求原则,它们的意
思分别是,ACID:atomicity, consistency, isolation, durability;BASE:Basically Available, Soft-state, Eventually Consistent。同时有意思的是ACID在英语⾥意为酸,BASE意思为碱)(基本可⽤,软状态,最终⼀致)
2. 理解持久化与⾮持久化的区别。这么说是因为有的NoSQL系统是纯内存存储的。
3. 你必须意识到传统有关系型数据库与NoSQL系统在数据结构上的本质区别。传统关系型数据库通常是基于⾏的表格型存储,⽽NoSQL
hbase属于什么数据库系统包括了列式存储(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 版本)
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邮件数据库所使⽤。
以上收集与⽹络,作为学习之⽤。