通常資料庫分為關系型資料庫和非關系型資料庫,關系型資料庫的優勢到現在也是無可替代的,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及比較小型的Access等等資料庫,這些資料庫支持復雜的SQL操作和事務機制,適合小量數據讀寫場景;但是到了大數據時代,人們更多的數據和物聯網加入的數據已經超出了關系資料庫的承載范圍。
大數據時代初期,隨著數據請求並發量大不斷增大,一般都是採用的集群同步數據的方式處理,就是將資料庫分成了很多的小庫,每個資料庫的數據內容是不變的,都是保存了源資料庫的數據副本,通過同步或者非同步方式保證數據的一致性,每個庫設定特定的讀寫方式,比如主資料庫負責寫操作,從資料庫是負責讀操作,等等根據業務復雜程度以此類推,將業務在物理層面上進行了分離,但是這種方式依舊存在一定的負載壓力的問題,企業數據在不斷的擴增中,後面就採用分庫分表的方式解決,對讀寫負載進行分離,但是這種實現依舊存在不足,且需要不斷進行資料庫伺服器擴容。
NoSQL資料庫大致分為5種類型
1、列族資料庫:BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB等,下面簡單介紹幾個
(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訪問。
2、鍵值資料庫:Redis、SimpleDB、Scalaris、Memcached等,下面簡單介紹幾個
(1)Riak:Riak是一個開源,分布式鍵值資料庫,支持數據復制和容錯。(2)Redis:Redis是一個開源的鍵值存儲。支持主從式復制、事務,Pub/Sub、Lua腳本,還支持給Key添加時限。
(3)Dynamo:Dynamo是一個鍵值分布式數據存儲。它直接由亞馬遜Dynamo資料庫實現;在亞馬遜S3產品中使用。
(4)Oracle NoSQL Database:來自Oracle的鍵值NoSQL資料庫。它支持事務ACID(原子性、一致性、持久性和獨立性)和JSON。
(5)Oracle NoSQL Database:具備數據備份和分布式鍵值存儲系統。
(6)Voldemort:具備數據備份和分布式鍵值存儲系統。
(7)Aerospike:Aerospike資料庫是一個鍵值存儲,支持混合內存架構,通過強一致性和可調一致性保證數據的完整性。
3、文檔資料庫:MongoDB、CouchDB、Perservere、Terrastore、RavenDB等,下面簡單介紹幾個
(1)MongoDB:開源、面向文檔,也是當下最人氣的NoSQL資料庫。
(2)CounchDB:Apache CounchDB是一個使用JSON的文檔資料庫,使用Javascript做MapRece查詢,以及一個使用HTTP的API。
(3)Couchbase:NoSQL文檔資料庫基於JSON模型。
(4)RavenDB:RavenDB是一個基於.NET語言的面向文檔資料庫。
(5)MarkLogic:MarkLogic NoSQL資料庫用來存儲基於XML和以文檔為中心的信息,支持靈活的模式。
4、圖資料庫:Neo4J、InfoGrid、OrientDB、GraphDB,下面簡單介紹幾個
(1)Neo4j:Neo4j是一個圖資料庫;支持ACID事務(原子性、獨立性、持久性和一致性)。
(2)InfiniteGraph:一個圖資料庫用來維持和遍歷對象間的關系,支持分布式數據存儲。
(3)AllegroGraph:AllegroGraph是結合使用了內存和磁碟,提供了高可擴展性,支持SPARQ、RDFS++和Prolog推理。
5、內存數據網格:Hazelcast、Oracle Coherence、Terracotta BigMemorry、GemFire、Infinispan、GridGain、GigaSpaces,下面簡單介紹幾個
(1)Hazelcast:Hazelcast CE是一個開源數據分布平台,它允許開發者在資料庫集群之上共享和分割數據。
(2)Oracle Coherence:Oracle的內存數據網格解決方案提供了常用數據的快速訪問能力,一致性支持事務處理能力和數據的動態劃分。
(3)Terracotta BigMemory:來自Terracotta的分布式內存管理解決方案。這項產品包括一個Ehcache界面、Terracotta管理控制台和BigMemory-Hadoop連接器。
(4)GemFire:Vmware vFabric GemFire是一個分布式數據管理平台,也是一個分布式的數據網格平台,支持內存數據管理、復制、劃分、數據識別路由和連續查詢。
(5)Infinispan:Infinispan是一個基於Java的開源鍵值NoSQL數據存儲,和分布式數據節點平台,支持事務,peer-to-peer 及client/server 架構。
(6)GridGain:分布式、面向對象、基於內存、SQL+NoSQL鍵值資料庫。支持ACID事務。
(7)GigaSpaces:GigaSpaces內存數據網格能夠充當應用的記錄系統,並支持各種各樣的高速緩存場景。