一、大數據用什么數據庫
通常數據庫分為關系型數據庫和非關系型數據庫,關系型數據庫的優勢到現在也是無可替代的,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及比較小型的Access等等數據庫,這些數據庫支持復雜的SQL操作和事務機制,適合小量數據讀寫場景;但是到了大數據時代,人們更多的數據和物聯網加入的數據已經超出了關系數據庫的承載范圍。
大數據時代初期,隨著數據請求并發量大不斷增大,一般都是采用的集群同步數據的方式處理,就是將數據庫分成了很多的小庫,每個數據庫的數據內容是不變的,都是保存了源數據庫的數據副本,通過同步或者異步方式保證數據的一致性,每個庫設定特定的讀寫方式,比如主數據庫負責寫操作,從數據庫是負責讀操作,等等根據業務復雜程度以此類推,將業務在物理層面上進行了分離,但是這種方式依舊存在一定的負載壓力的問題,企業數據在不斷的擴增中,后面就采用分庫分表的方式解決,對讀寫負載進行分離,但是這種實現依舊存在不足,且需要不斷進行數據庫服務器擴容。
所以到了大數據時代,業務更多的數據和物聯網采集的數據已經超出了關系數據庫的承載范圍。本文著重介紹一下NoSQL(Not Only 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的文檔數據庫,使用Java做MapReduce查詢,以及一個使用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連接器。
(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事務。