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