四種重要的非關系型數據庫


Hbase

    列式存儲以流的方式在列中存儲所有的數據。對於任何記錄,索引都可以快速地獲取列上的數據;列式存儲支持行檢索,但這需要從每個列獲取匹配的列值,並重新組成行。HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。HBase是Google BigTable的開源實現,模仿並提供了基於Google文件系統的BigTable數據庫的所有功能。HBase可以直接使用本地文件系統或者Hadoop作為數據存儲方式,不過為了提高數據可靠性和系統的健壯性,發揮HBase處理大數據量等功能,需要使用Hadoop作為文件系統。HBase僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務,主要用來存儲非結構化和半結構化的松散數據。

Hbase中表的特點:大,稀疏,面向列

 

Hadoop生態系統中的各層系統

HBase位於結構化存儲層;

HDFS為HBase提供了高可靠性的底層存儲支持;

MapReduce為HBase提供了高性能的計算能力;

Zookeeper為HBase提供了穩定服務和失敗恢復機制;

Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單;

Sqoop則為HBase提供了方便的RDBMS數據導入功能,方便數據遷移;

 

 

Hbase在互聯網存儲的幾個應用場景:

1.抓取增量數據

使用HBase 作為數據存儲,抓取來自各種數據源的增量數據,如抓取用戶交互數據,以備之后進行分析、處理

2.內容服務

傳統數據庫最主要的使用場合之一是為用戶提供內容服務,如URL短鏈接服務,可以HBase為基礎,存儲大量的短鏈接以及和原始長鏈接的映射關系

3.信息交換

Facebook的短信平台每天交換數十億條短信,HBase可以很好的滿足該平台的需求:高的寫吞吐量,極大的表,數據中心的強一致性

Hbase與傳統關系型數據庫區別:

數據類型

HBase只有簡單的字符串類型,所有類型都由用戶自己處理,它只保存字符串;

關系數據庫有豐富的類型選擇和存儲方式。

數據操作

HBase操作只有很簡單的插入、查詢、刪除、清空等,表和表之間是分離的,沒有復雜的表和表之間的關系,所以也不能也沒有必要實現表和表之間的關聯等操作;

傳統的關系數據通常有各種各樣的函數、連接操作。

存儲模式

HBase是基於列存儲的,每個列族都有幾個文件保存,不同列族的文件是分離的;

傳統的關系數據庫是基於表格結構和行模式保存的。

數據維護

HBase的更新正確來說應該不叫更新,而且一個主鍵或者列對應的新的版本,而它舊有的版本仍然會保留,所以它實際上是插入了新的數據;

傳統關系數據庫里面是替換修改。

可伸縮性

HBase和BigTable這類分布式數據庫就是直接為了這個目的開發出來的,能夠輕易的增加或者減少(在硬件錯誤的時候)硬件數量,而且對錯誤的兼容性比較高;

傳統的關系數據庫通常需要增加中間層才能實現類似的功能。

修改表模式需要先將表設置為不可用(disable),模式修改完成再啟用表(enable)

HBase的三個主要的功能組件

庫函數:鏈接到每個客戶端;一個HMaster主服務器;許多個HRegion服務器。

Hbase三層結構

1.Zookeeper文件:它記錄了-ROOT-表的位置信息,即root region的位置信息。

2.-ROOT-表:只包含一個root region,記錄了.META.表中的region信息。通過root region,我們就可以訪問.META.表的數據。

3.META.表:記錄了用戶表的HRegion信息,.META.表可以有多個HRegion,保存了HBase中所有數據表的HRegion位置信息。

Hbase兩種文件類型

HFile:HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進制格式文件,實際上HStoreFile就是對HFile做了輕量級包裝,即HStoreFile底層就是HFile。

HLogFile:HBase中WAL(Write Ahead Log)的存儲格式,物理上是Hadoop的順序文件。

 

Redis

    Redis是一個key-value存儲系統,key為字符串類型,只能通過key對value進行操作,支持的數據類型包括string、list、set、zset(有序集合)和hash。Redis支持主從同步,數據可以從主服務器向任意數量的從服務器上同步。

    Redis事務允許一組命令在單一步驟中執行。事務有兩個屬性:在一個事務中的所有命令作為單個獨立的操作順序執行;Redis事務是原子的,原子意味着要么所有的命令都執行,要么都不執行。Redis 事務由指令 MULTI 發起的,之后傳遞需要在事務中和整個事務中,最后由 EXEC 命令執行所有命令的列表。

Redis分區

    是將數據分割成多個 Redis 實例,使每個實例將只包含鍵子集的過程.它允許更大的數據庫,使用多台計算機的內存總和,它允許按比例在多內核和多個計算機計算,以及網絡帶寬向多台計算機和網絡適配器。劣勢:涉及多個鍵時,Redis事務無法使用;數據處理比較復雜;加和刪除的容量可能會很復雜。

分區類型:范圍分區;散列分區

Redis 數據庫可以配置安全保護的,所以任何客戶端在連接執行命令時需要進行身份驗證。

應用:統計

 

MongodDB

    一個基於分布式文件存儲的開源數據庫系統,為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key value)對組成。

特點:

    面向集合存儲,易存儲對象類型的數據;模式自由;支持動態查詢;支持完全索引,包含內部對象;支持查詢;支持復制和故障恢復;使用高效的二進制數據存儲,包括大型對象(如視頻);自動處理碎片,以支持雲計算層次的擴展性;支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言;文件存儲格式為BSON(一種JSON的擴展);可通過網絡訪問。

適用場景:網站數據;緩存;大尺寸,低價值的數據;高伸縮性的場景;用於對象及JSON 數據的存儲。

不適用場景:高度事務性的系統;傳統的商業智能應用;需要SQL 的問題。

*聚合管道將文檔在一個管道處理完畢后將結果傳遞給下一個管道處理,管道操作是可以重復的。

引用式文檔查詢:需要兩次查詢

    第一次查詢用戶地址的對象id(ObjectId);第二次通過查詢的id獲取用戶的詳細地址信息。

    集合中索引不能超過64個;索引名的長度不能超過125個字符;一個復合索引最多可以有31個字段。mongorestore 命令來恢復備份的數據。

 

Neo4j 

    是一個高性能的 NoSQL 圖形數據庫,把數據保存為圖中的節點以及節點之間的關系。Neo4j 中兩個最基本的概念是節點和邊

節點表示實體,邊則表示實體之間的關系。節點和邊都可以有自己的屬性,不同實體通過各種不同的關系關聯起來,形成復雜的對象圖。

    Neo4j 提供了在對象圖上進行查找和遍歷的功能:深度搜索、廣度搜索。

特點:

    完整的ACID支持;高可用性;輕易擴展到上億級別的節點和關系;通過遍歷工具高速檢索數據;屬性是由Key-Value鍵值對組成。

應用:社交網絡,歌曲信息,狀態圖

 

數據庫轉化

關系型數據庫

 

 

Hbase

 

 

Redis

 

 

MongoDB

 

 

Neo4j

 

 

NewSQL

    是對各種新的可擴展/高性能數據庫的簡稱。具有NoSQL對海量數據的存儲管理能力,保持了傳統數據庫支持ACID和SQL等特性。

NewSQL共同特點:支持關系數據模型;使用SQL作為其主要的接口。

 

轉載:https://blog.csdn.net/qq_34116402/article/details/79578187

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM