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