通常數據庫分爲關係型數據庫和非關係型數據庫,關係型數據庫的優勢到現在也是無可替代的,比如MySQL、Oracle、SQL Server、DB2、SyBase、Informix、PostgreSQL以及比較小型的Access等等數據庫,這些數據庫支持複雜的SQL操作和事務機制,適合小量數據讀寫場景;但是到了大數據時代,人們更多的數據和物聯網加入的數據已經超出了關係數據庫的承載範圍。
大數據時代初期,隨着數據請求併發量大不斷增大,一般都是採用的集羣同步數據的方式處理,就是將數據庫分成了很多的小庫,每個數據庫的數據內容是不變的,都是保存了源數據庫的數據副本,通過同步或者異步方式保證數據的一致性,每個庫設定特定的讀寫方式,比如主數據庫負責寫操作,從數據庫是負責讀操作,等等根據業務複雜程度以此類推,將業務在物理層面上進行了分離,但是這種方式依舊存在一定的負載壓力的問題,企業數據在不斷的擴增中,後面就採用分庫分表的方式解決,對讀寫負載進行分離,但是這種實現依舊存在不足,且需要不斷進行數據庫服務器擴容。
本文着重介紹一下NoSQL(Not Only SQL)數據庫。我總體將NoSQL分爲5類
一、列族數據庫
下面簡單介紹幾個
(1)Cassandra:
Cassandra是一個列存儲數據庫,支持跨數據中心的數據複製。它的數據模型提供列索引,log-structured修改,支持反規範化,實體化視圖和嵌入超高速緩存。
(2)HBase:
Apache Hbase源於Google的Bigtable,是一個開源、分佈式、面向列存儲的模型。在Hadoop和HDFS之上提供了像Bigtable一樣的功能。
(3)Amazon SimpleDB:
Amazon SimpleDB是一個非關係型數據存儲,它卸下數據庫管理的工作。開發者使用Web服務請求存儲和查詢數據項
(4)Apache Accumulo:
Apache Accumulo的有序的、分佈式鍵值數據存儲,基於Google的BigTable設計,建立在Apache Hadoop、Zookeeper和Thrift技術之上。
(5)Hypertable:
Hypertable是一個開源、可擴展的數據庫,模仿Bigtable,支持分片。
(6)Azure Tables:
Windows Azure Table Storage Service爲要求大量非結構化數據存儲的應用提供NoSQL性能。表能夠自動擴展到TB級別,能通過REST和Managed API訪問。
二、鍵值數據庫
下面簡單介紹幾個
(1)Redis:
Redis是一個開源的鍵值存儲。支持主從式複製、事務,Pub/Sub、Lua腳本,還支持給Key添加時限。
(2)Riak:
Riak是一個開源,分佈式鍵值數據庫,支持數據複製和容錯。
(3)Dynamo:
Dynamo是一個鍵值分佈式數據存儲。它直接由亞馬遜Dynamo數據庫實現;在亞馬遜S3產品中使用。
(4)Oracle NoSQL Database:
來自Oracle的鍵值NoSQL數據庫。它支持事務ACID(原子性、一致性、持久性和獨立性)和JSON。
(5)Voldemort:
具備數據備份和分佈式鍵值存儲系統。
(6)Aerospike:
Aerospike數據庫是一個鍵值存儲,支持混合內存架構,通過強一致性和可調一致性保證數據的完整性。
三、文檔數據庫
(1)MongoDB:
開源、面向文檔,也是當下最人氣的NoSQL數據庫。
(2)CounchDB:
Apache CounchDB是一個使用JSON的文檔數據庫,使用Java做MapReduce查詢,以及一個使用HTTP的API。
(3)Couchbase:
NoSQL文檔數據庫基於JSON模型。
(4)RavenDB:
RavenDB是一個基於.NET語言的面向文檔數據庫。
(5)MarkLogic:
MarkLogic NoSQL數據庫用來存儲基於XML和以文檔爲中心的信息,支持靈活的模式。
四、圖數據庫
(1)Neo4j:
Neo4j是一個圖數據庫;支持ACID事務(原子性、獨立性、持久性和一致性)。
(2)InfiniteGraph:
一個圖數據庫用來維持和遍歷對象間的關係,支持分佈式數據存儲。
(3)AllegroGraph:
AllegroGraph是結合使用了內存和磁盤,提供了高可擴展性,支持SPARQ、RDFS++和Prolog推理。
五、內存數據網格
(1)Hazelcast:
Hazelcast CE是一個開源數據分佈平臺,它允許開發者在數據庫集羣之上共享和分割數據。
(2)Oracle Coherence:
Oracle的內存數據網格解決方案提供了常用數據的快速訪問能力,一致性支持事務處理能力和數據的動態劃分。
(3)Terracotta BigMemory:
來自Terracotta的分佈式內存管理解決方案。這項產品包括一個Ehcache界面、Terracotta管理控制檯和BigMemory-Hadoop連接器。
(5)Infinispan:
Infinispan是一個基於Java的開源鍵值NoSQL數據存儲,和分佈式數據節點平臺,支持事務,peer-to-peer 及client/server 架構。
(6)GridGain:
分佈式、面向對象、基於內存、SQL+NoSQL鍵值數據庫。支持ACID事務。
(7)GigaSpaces:
GigaSpaces內存數據網格能夠充當應用的記錄系統,並支持各種各樣的高速緩存場景。
NoSQL的優勢:
NoSQL數據庫一直以性能、可擴展性、靈活的模式和分析能力聚焦着人們的注意力。儘管關係型數據庫對於某些用例來說仍是一個不錯的選擇,就像結構數據和要求ACID事務的應用。
1、存儲的數據實質上是半結構化或者鬆散的;
2、要求一定的等級的性能和擴展性;
3、存取該數據的應用與最終的一致性相吻合;
4、靈活的模式;
5、無共享架構;
6、分片作爲數據存儲模型的一部分;
7、異步複製;
8、使用BASE替代ACID事務。