Hbase 列式存儲(chǔ)以流的方式在列中存儲(chǔ)所有的數(shù)據(jù)。對(duì)于任何記錄,索引都可以快速地獲取列上的數(shù)據(jù);列式存儲(chǔ)支持行檢索,但這需要從每個(gè)列獲取匹配的列值,并重新組成行。HBase(Hadoop Database)是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。HBase是Google BigTable的開(kāi)源實(shí)現(xiàn),模仿并提供了基于Google文件系統(tǒng)的BigTable數(shù)據(jù)庫(kù)的所有功能。HBase可以直接使用本地文件系統(tǒng)或者Hadoop作為數(shù)據(jù)存儲(chǔ)方式,不過(guò)為了提高數(shù)據(jù)可靠性和系統(tǒng)的健壯性,發(fā)揮HBase處理大數(shù)據(jù)量等功能,需要使用Hadoop作為文件系統(tǒng)。HBase僅能通過(guò)主鍵(row key)和主鍵的range來(lái)檢索數(shù)據(jù),僅支持單行事務(wù),主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。 Hbase中表的特點(diǎn):大,稀疏,面向列
Hadoop生態(tài)系統(tǒng)中的各層系統(tǒng) HBase位于結(jié)構(gòu)化存儲(chǔ)層; HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持; MapReduce為HBase提供了高性能的計(jì)算能力; Zookeeper為HBase提供了穩(wěn)定服務(wù)和失敗恢復(fù)機(jī)制; Pig和Hive還為HBase提供了高層語(yǔ)言支持,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計(jì)處理變的非常簡(jiǎn)單; Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,方便數(shù)據(jù)遷移;
Hbase在互聯(lián)網(wǎng)存儲(chǔ)的幾個(gè)應(yīng)用場(chǎng)景: 1.抓取增量數(shù)據(jù) 使用HBase 作為數(shù)據(jù)存儲(chǔ),抓取來(lái)自各種數(shù)據(jù)源的增量數(shù)據(jù),如抓取用戶交互數(shù)據(jù),以備之后進(jìn)行分析、處理 2.內(nèi)容服務(wù) 傳統(tǒng)數(shù)據(jù)庫(kù)最主要的使用場(chǎng)合之一是為用戶提供內(nèi)容服務(wù),如URL短鏈接服務(wù),可以HBase為基礎(chǔ),存儲(chǔ)大量的短鏈接以及和原始長(zhǎng)鏈接的映射關(guān)系 3.信息交換 Facebook的短信平臺(tái)每天交換數(shù)十億條短信,HBase可以很好的滿足該平臺(tái)的需求:高的寫(xiě)吞吐量,極大的表,數(shù)據(jù)中心的強(qiáng)一致性 Hbase與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)區(qū)別: 數(shù)據(jù)類(lèi)型 HBase只有簡(jiǎn)單的字符串類(lèi)型,所有類(lèi)型都由用戶自己處理,它只保存字符串; 關(guān)系數(shù)據(jù)庫(kù)有豐富的類(lèi)型選擇和存儲(chǔ)方式。 數(shù)據(jù)操作 HBase操作只有很簡(jiǎn)單的插入、查詢、刪除、清空等,表和表之間是分離的,沒(méi)有復(fù)雜的表和表之間的關(guān)系,所以也不能也沒(méi)有必要實(shí)現(xiàn)表和表之間的關(guān)聯(lián)等操作; 傳統(tǒng)的關(guān)系數(shù)據(jù)通常有各種各樣的函數(shù)、連接操作。 存儲(chǔ)模式 HBase是基于列存儲(chǔ)的,每個(gè)列族都有幾個(gè)文件保存,不同列族的文件是分離的; 傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)是基于表格結(jié)構(gòu)和行模式保存的。 數(shù)據(jù)維護(hù) HBase的更新正確來(lái)說(shuō)應(yīng)該不叫更新,而且一個(gè)主鍵或者列對(duì)應(yīng)的新的版本,而它舊有的版本仍然會(huì)保留,所以它實(shí)際上是插入了新的數(shù)據(jù); 傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)里面是替換修改。 可伸縮性 HBase和BigTable這類(lèi)分布式數(shù)據(jù)庫(kù)就是直接為了這個(gè)目的開(kāi)發(fā)出來(lái)的,能夠輕易的增加或者減少(在硬件錯(cuò)誤的時(shí)候)硬件數(shù)量,而且對(duì)錯(cuò)誤的兼容性比較高; 傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)通常需要增加中間層才能實(shí)現(xiàn)類(lèi)似的功能。 修改表模式需要先將表設(shè)置為不可用(disable),模式修改完成再啟用表(enable) HBase的三個(gè)主要的功能組件 庫(kù)函數(shù):鏈接到每個(gè)客戶端;一個(gè)HMaster主服務(wù)器;許多個(gè)HRegion服務(wù)器。 Hbase三層結(jié)構(gòu) 1.Zookeeper文件:它記錄了-ROOT-表的位置信息,即root region的位置信息。 2.-ROOT-表:只包含一個(gè)root region,記錄了.META.表中的region信息。通過(guò)root region,我們就可以訪問(wèn).META.表的數(shù)據(jù)。 3.META.表:記錄了用戶表的HRegion信息,.META.表可以有多個(gè)HRegion,保存了HBase中所有數(shù)據(jù)表的HRegion位置信息。 Hbase兩種文件類(lèi)型 HFile:HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,HFile是Hadoop的二進(jìn)制格式文件,實(shí)際上HStoreFile就是對(duì)HFile做了輕量級(jí)包裝,即HStoreFile底層就是HFile。 HLogFile:HBase中WAL(Write Ahead Log)的存儲(chǔ)格式,物理上是Hadoop的順序文件。
Redis Redis是一個(gè)key-value存儲(chǔ)系統(tǒng),key為字符串類(lèi)型,只能通過(guò)key對(duì)value進(jìn)行操作,支持的數(shù)據(jù)類(lèi)型包括string、list、set、zset(有序集合)和hash。Redis支持主從同步,數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步。 Redis事務(wù)允許一組命令在單一步驟中執(zhí)行。事務(wù)有兩個(gè)屬性:在一個(gè)事務(wù)中的所有命令作為單個(gè)獨(dú)立的操作順序執(zhí)行;Redis事務(wù)是原子的,原子意味著要么所有的命令都執(zhí)行,要么都不執(zhí)行。Redis 事務(wù)由指令 MULTI 發(fā)起的,之后傳遞需要在事務(wù)中和整個(gè)事務(wù)中,最后由 EXEC 命令執(zhí)行所有命令的列表。 Redis分區(qū) 是將數(shù)據(jù)分割成多個(gè) Redis 實(shí)例,使每個(gè)實(shí)例將只包含鍵子集的過(guò)程.它允許更大的數(shù)據(jù)庫(kù),使用多臺(tái)計(jì)算機(jī)的內(nèi)存總和,它允許按比例在多內(nèi)核和多個(gè)計(jì)算機(jī)計(jì)算,以及網(wǎng)絡(luò)帶寬向多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)適配器。劣勢(shì):涉及多個(gè)鍵時(shí),Redis事務(wù)無(wú)法使用;數(shù)據(jù)處理比較復(fù)雜;加和刪除的容量可能會(huì)很復(fù)雜。 分區(qū)類(lèi)型:范圍分區(qū);散列分區(qū) Redis 數(shù)據(jù)庫(kù)可以配置安全保護(hù)的,所以任何客戶端在連接執(zhí)行命令時(shí)需要進(jìn)行身份驗(yàn)證。 應(yīng)用:統(tǒng)計(jì)
MongodDB 一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng),為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key value)對(duì)組成。 特點(diǎn): 面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類(lèi)型的數(shù)據(jù);模式自由;支持動(dòng)態(tài)查詢;支持完全索引,包含內(nèi)部對(duì)象;支持查詢;支持復(fù)制和故障恢復(fù);使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻);自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性;支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語(yǔ)言;文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展);可通過(guò)網(wǎng)絡(luò)訪問(wèn)。 適用場(chǎng)景:網(wǎng)站數(shù)據(jù);緩存;大尺寸,低價(jià)值的數(shù)據(jù);高伸縮性的場(chǎng)景;用于對(duì)象及JSON 數(shù)據(jù)的存儲(chǔ)。 不適用場(chǎng)景:高度事務(wù)性的系統(tǒng);傳統(tǒng)的商業(yè)智能應(yīng)用;需要SQL 的問(wèn)題。 *聚合管道將文檔在一個(gè)管道處理完畢后將結(jié)果傳遞給下一個(gè)管道處理,管道操作是可以重復(fù)的。 引用式文檔查詢:需要兩次查詢 第一次查詢用戶地址的對(duì)象id(ObjectId);第二次通過(guò)查詢的id獲取用戶的詳細(xì)地址信息。 集合中索引不能超過(guò)64個(gè);索引名的長(zhǎng)度不能超過(guò)125個(gè)字符;一個(gè)復(fù)合索引最多可以有31個(gè)字段。mongorestore 命令來(lái)恢復(fù)備份的數(shù)據(jù)。
Neo4j 是一個(gè)高性能的 NoSQL 圖形數(shù)據(jù)庫(kù),把數(shù)據(jù)保存為圖中的節(jié)點(diǎn)以及節(jié)點(diǎn)之間的關(guān)系。Neo4j 中兩個(gè)最基本的概念是節(jié)點(diǎn)和邊 節(jié)點(diǎn)表示實(shí)體,邊則表示實(shí)體之間的關(guān)系。節(jié)點(diǎn)和邊都可以有自己的屬性,不同實(shí)體通過(guò)各種不同的關(guān)系關(guān)聯(lián)起來(lái),形成復(fù)雜的對(duì)象圖。 Neo4j 提供了在對(duì)象圖上進(jìn)行查找和遍歷的功能:深度搜索、廣度搜索。 特點(diǎn): 完整的ACID支持;高可用性;輕易擴(kuò)展到上億級(jí)別的節(jié)點(diǎn)和關(guān)系;通過(guò)遍歷工具高速檢索數(shù)據(jù);屬性是由Key-Value鍵值對(duì)組成。 應(yīng)用:社交網(wǎng)絡(luò),歌曲信息,狀態(tài)圖
數(shù)據(jù)庫(kù)轉(zhuǎn)化 關(guān)系型數(shù)據(jù)庫(kù)
Hbase
Redis
MongoDB
Neo4j
NewSQL 是對(duì)各種新的可擴(kuò)展/高性能數(shù)據(jù)庫(kù)的簡(jiǎn)稱。具有NoSQL對(duì)海量數(shù)據(jù)的存儲(chǔ)管理能力,保持了傳統(tǒng)數(shù)據(jù)庫(kù)支持ACID和SQL等特性。 NewSQL共同特點(diǎn):支持關(guān)系數(shù)據(jù)模型;使用SQL作為其主要的接口。
轉(zhuǎn)載:https://blog.csdn.net/qq_34116402/article/details/79578187
|
|