1. 程式人生 > >關系型數據庫和非關系型數據庫 對比

關系型數據庫和非關系型數據庫 對比

給人 通過 mode soft compare 持久化 bili 分片 倉庫

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的區別(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郵件數據庫所使用。

以上收集與網絡,作為學習之用。

關系型數據庫和非關系型數據庫 對比