數據庫:簡述對非關係型數據庫(NoSQL)的認識


  1. 數據庫:簡述對數據庫的認識

  2. 數據庫:簡述對關係型數據庫(RDBMS)的認識

  3. 數據庫:簡述對非關係型數據庫(NoSQL)的認識

  4. 數據庫:關係型數據庫和非關係型數據庫的區別

  5. 數據庫:簡述對分佈式數據庫的認識


一、非關係型數據庫的概念

隨着近些年技術方向的不斷拓展,大量的NoSql數據庫如MongoDB、Redis、Memcached出於簡化數據庫結構、避免冗餘、影響性能的表連接、摒棄複雜分佈式的目的被設計。

NoSQL數據庫指的是分佈式的、非關係型的、不保證遵循ACID原則的數據存儲系統。

NoSQL數據庫技術與CAP理論、一致性哈希算法有密切關係。所謂CAP理論,簡單來說就是一個分佈式系統不可能滿足可用性、一致性與分區容錯性這三個要求,一次性滿足兩種要求是該系統的上限。而一致性哈希算法則指的是NoSQL數據庫在應用過程中,爲滿足工作需求而在通常情況下產生的一種數據算法,該算法能有效解決工作方面的諸多問題但也存在弊端,即工作完成質量會隨着節點的變化而產生波動,當節點過多時,相關工作結果就無法那麼準確。這一問題使整個系統的工作效率受到影響,導致整個數據庫系統的數據亂碼與出錯率大大提高,甚至會出現數據節點的內容遷移,產生錯誤的代碼信息。但儘管如此,NoSQL數據庫技術還是具有非常明顯的應用優勢,如數據庫結構相對簡單,在大數據量下的讀寫性能好;能滿足隨時存儲自定義數據格式需求,非常適用於大數據處理工作。

NoSQL數據庫適合追求速度和可擴展性、業務多變的應用場景。 對於非結構化數據的處理更合適,如文章、評論,這些數據如全文搜索、機器學習通常只用於模糊處理,並不需要像結構化數據一樣,進行精確查詢,而且這類數據的數據規模往往是海量的,數據規模的增長往往也是不可能預期的,而NoSQL數據庫的擴展能力幾乎也是無限的,所以NoSQL數據庫可以很好的滿足這一類數據的存儲。

二、非關係型數據庫的存儲方式

NoSQL數據庫利用key-value可以獲取大量的非結構化數據,並且數據的獲取效率很高,但用它查詢結構化數據效果就比較差。

目前NoSQL數據庫仍然沒有一個統一的標準,它現在有四種大的分類:
(1) 鍵值對存儲(key-value):代表軟件Redis,它的優點能夠進行數據的快速查詢,而缺點是需要存儲數據之間的關係。
(2) 列存儲:代表軟件Hbase,它的優點是對數據能快速查詢,數據存儲的擴展性強。而缺點是數據庫的功能有侷限性。
(3) 文檔數據庫存儲:代表軟件MongoDB,它的優點是對數據結構要求不特別的嚴格。而缺點是查詢性的性能不好,同時缺少一種統一查詢語言。
(4) 圖形數據庫存儲:代表軟件InfoGrid,它的優點可以方便的利用圖結構相關算法進行計算。而缺點是要想得到結果必須進行整個圖的計算,而且遇到不適合的數據模型時,圖形數據庫很難使用。

存儲方式
鍵值對存儲(l臨時) Memcached,Redis
鍵值對存儲(永久) Redis,Flare,Tokyo Tyrant
列存儲 Hbase,Cassandra
文檔數據庫存儲 MongoDB,CouchDB
圖形數據庫存儲 InfoGrid

三、主流非關係型數據庫的講解

3.1 MongoDB

MongoDB 是一個高性能,開源,無模式的文檔型數據庫,開發語言是C++。它在許多場景下可用於替代統的關係型數據庫或鍵/值存儲方式。

  1. MongoDB特點

01)所用語言:C++
02)特點:保留了SQL一些友好的特性(查詢,索引)。
03)使用許可: AGPL(發起者: Apache)
04)協議: Custom, binary( BSON)
05)Master/slave複製(支持自動錯誤恢復,使用 sets 複製)
06)內建分片機制
07)支持 javascript表達式查詢
08)可在服務器端執行任意的 javascript函數
09)update-in-place支持比CouchDB更好
10)在數據存儲時採用內存到文件映射
11)對性能的關注超過對功能的要求
12)建議最好打開日誌功能(參數 --journal)
13)在32位操作系統上,數據庫大小限制在約2.5Gb
14)空數據庫大約佔 192Mb
15)採用 GridFS存儲大數據或元數據(不是真正的文件系統)

  1. MongoDB優點

01)更高的寫負載,MongoDB擁有更高的插入速度。
02)處理很大的規模的單表,當數據表太大的時候可以很容易的分割表。
03)高可用性,設置M-S不僅方便而且很快,MongoDB還可以快速、安全及自動化的實現節點 (數據中心)故障轉移。
04)快速的查詢,MongoDB支持二維空間索引,比如管道,因此可以快速及精確的從指定位置 獲取數據。MongoDB在啓動後會將數據庫中的數據以文件映射的方式加載到內存中。如果內 存資源相當豐富的話,這將極大地提高數據庫的查詢速度。
05)非結構化數據的爆發增長,增加列在有些情況下可能鎖定整個數據庫,或者增加負載從而 導致性能下降,由於MongoDB的弱數據結構模式,添加1個新字段不會對舊錶格有任何影響, 整個過程會非常快速。

  1. MongoDB缺點:

01)前期不支持事務,MongoDB 4.x後支持。
02)MongoDB佔用空間過大 。
03)MongoDB沒有成熟的維護工具。

  1. MongoDB應用場景

01)適用於實時的插入、更新與查詢的需求,並具備應用程序實時數據存儲所需的複製及高度伸縮性;
02)非常適合文檔化格式的存儲及查詢;
03)高伸縮性的場景:MongoDB 非常適合由數十或者數百臺服務器組成的數據庫。
04)對性能的關注超過對功能的要求。

3.2 HBase

HBase 是 Apache Hadoop 中的一個子項目,屬於 bigtable 的開源版本,所實現的語言爲Java(故依賴 Java SDK)。HBase 依託於 Hadoop 的 HDFS(分佈式文件系統)作爲最基本存儲基礎單元。

  1. HBase 特點

01)所用語言: Java
02)特點:支持數十億行X上百萬列
03)使用許可: Apache
04)協議:HTTP/REST (支持 Thrift,見編注4)
05)在 BigTable之後建模
06)採用分佈式架構 Map/reduce
07)對實時查詢進行優化
08)高性能 Thrift網關
09)通過在server端掃描及過濾實現對查詢操作預判
10)支持 XML, Protobuf, 和binary的HTTP
11)Cascading, hive, and pig source and sink modules
12)基於 Jruby( JIRB)的shell
13)對配置改變和較小的升級都會重新回滾
14)不會出現單點故障
15)堪比MySQL的隨機訪問性能

  1. HBase 優點

01) 存儲容量大,一個表可以容納上億行,上百萬列;
02)可通過版本進行檢索,能搜到所需的歷史版本數據;
03)負載高時,可通過簡單的添加機器來實現水平切分擴展,跟Hadoop的無縫集成保障了其數據可靠性(HDFS)和海量數據分析的高性能(MapReduce);
04)在第3點的基礎上可有效避免單點故障的發生。

  1. HBase 缺點

01)基於Java語言實現及Hadoop架構意味着其API更適用於Java項目;
02)node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺乏文檔;
03)佔用內存很大,且鑑於建立在爲批量分析而優化的HDFS上,導致讀取性能不高;
04)API相比其它 NoSql 的相對笨拙。

  1. HBase 適用場景

01)bigtable類型的數據存儲;
02)對數據有版本查詢需求;
03)應對超大數據量要求擴展簡單的需求。

3.3Redis

Redis 是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。目前由VMware主持開發工作。

  1. Redis 特點

01)所用語言:C/C++
02)特點:運行異常快
03)使用許可: BSD
04)協議:類 Telnet
05)有硬盤存儲支持的內存數據庫,但自2.0版本以後可以將數據交換到硬盤(注意, 2.4以後版本不支持該特性!)
06)Master-slave複製
07)雖然採用簡單數據或以鍵值索引的哈希表,但也支持複雜操作
08)INCR & co (適合計算極限值或統計數據)
09)支持 sets(同時也支持 union/diff/inter)
10)支持列表(同時也支持隊列;阻塞式 pop操作)
11)支持哈希表(帶有多個域的對象)
12)支持排序 sets(高得分表,適用於範圍查詢)
13)Redis支持事務
14)支持將數據設置成過期數據(類似快速緩衝區設計)
15)Pub/Sub允許用戶實現消息機制

  1. Redis 優勢

01)非常豐富的數據結構;
02)Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷;
03)數據存在內存中,讀寫非常的高速,可以達到10w/s的頻率。

  1. Redis 缺點

01) Redis3.0後纔出來官方的集羣方案,但仍存在一些架構上的問題;
02)持久化功能體驗不佳——通過快照方法實現的話,需要每隔一段時間將整個數據庫的數據寫到磁盤上,代價非常高;而aof方法只追蹤變化的數據,類似於mysql的binlog方法,但追加log可能過大,同時所有操作均要重新執行一遍,恢復速度慢;
03)由於是內存數據庫,所以,單臺機器,存儲的數據量,跟機器本身的內存大小。雖然redis本身有key過期策略,但是還是需要提前預估和節約內存。如果內存增長過快,需要定期刪除數據。

  1. Redis 應用場景

最佳應用場景:適用於數據變化快且數據庫大小可預見(適合內存容量)的應用程序。例如:微博、數據分析、實時數據蒐集、實時通訊等。

參考:https://mp.weixin.qq.com/s/g3rLECI5oyWOFEVMlTMfpw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章