目前存儲海量數(shù)據(jù)的技術(shù)主要包括NoSQL、分布式文件系統(tǒng)、和傳統(tǒng)關(guān)系型數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)行業(yè)不斷的發(fā)展,產(chǎn)生的數(shù)據(jù)量越來越多,并且這些數(shù)據(jù)的特點是半結(jié)構(gòu)化和非結(jié)構(gòu)化,數(shù)據(jù)很可能是不精確的,易變的。這樣傳統(tǒng)關(guān)系型數(shù)據(jù)庫就無法發(fā)揮它的優(yōu)勢。因此,目前互聯(lián)網(wǎng)行業(yè)偏向于使用NoSQL和分布式文件系統(tǒng)來存儲海量數(shù)據(jù)。
十載的望奎網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整望奎建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“望奎網(wǎng)站設(shè)計”,“望奎網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
下面介紹下常用的NoSQL和分布式文件系統(tǒng)。
NoSQL
互聯(lián)網(wǎng)行業(yè)常用的NoSQL有:HBase、MongoDB、Couchbase、LevelDB。
HBase是Apache Hadoop的子項目,理論依據(jù)為Google論文 Bigtable: A Distributed Storage System for Structured Data開發(fā)的。HBase適合存儲半結(jié)構(gòu)化或非結(jié)構(gòu)化的數(shù)據(jù)。HBase的數(shù)據(jù)模型是稀疏的、分布式的、持久穩(wěn)固的多維map。HBase也有行和列的概念,這是與RDBMS相同的地方,但卻又不同。HBase底層采用HDFS作為文件系統(tǒng),具有高可靠性、高性能。
MongoDB是一種支持高性能數(shù)據(jù)存儲的開源文檔型數(shù)據(jù)庫。支持嵌入式數(shù)據(jù)模型以減少對數(shù)據(jù)庫系統(tǒng)的I/O、利用索引實現(xiàn)快速查詢,并且嵌入式文檔和集合也支持索引,它復(fù)制能力被稱作復(fù)制集(replica set),提供了自動的故障遷移和數(shù)據(jù)冗余。MongoDB的分片策略將數(shù)據(jù)分布在服務(wù)器集群上。
Couchbase這種NoSQL有三個重要的組件:Couchbase服務(wù)器、Couchbase Gateway、Couchbase Lite。Couchbase服務(wù)器,支持橫向擴展,面向文檔的數(shù)據(jù)庫,支持鍵值操作,類似于SQL查詢和內(nèi)置的全文搜索;Couchbase Gateway提供了用于RESTful和流式訪問數(shù)據(jù)的應(yīng)用層API。Couchbase Lite是一款面向移動設(shè)備和“邊緣”系統(tǒng)的嵌入式數(shù)據(jù)庫。Couchbase支持千萬級海量數(shù)據(jù)存儲
分布式文件系統(tǒng)
如果針對單個大文件,譬如超過100MB的文件,使用NoSQL存儲就不適當(dāng)了。使用分布式文件系統(tǒng)的優(yōu)勢在于,分布式文件系統(tǒng)隔離底層數(shù)據(jù)存儲和分布的細(xì)節(jié),展示給用戶的是一個統(tǒng)一的邏輯視圖。常用的分布式文件系統(tǒng)有Google File System、HDFS、MooseFS、Ceph、GlusterFS、Lustre等。
相比過去打電話、發(fā)短信、用彩鈴的“老三樣”,移動互聯(lián)網(wǎng)的發(fā)展使得人們可以隨時隨地通過刷微博、看視頻、微信聊天、瀏覽網(wǎng)頁、地圖導(dǎo)航、網(wǎng)上購物、外賣訂餐等,這些業(yè)務(wù)的海量數(shù)據(jù)都構(gòu)建在大規(guī)模網(wǎng)絡(luò)云資源池之上。當(dāng)14億中國人把衣食住行搬上移動互聯(lián)網(wǎng)的同時,也給網(wǎng)絡(luò)云資源池帶來巨大業(yè)務(wù)挑戰(zhàn)。
首先,用戶需求動態(tài)變化,傳統(tǒng)業(yè)務(wù)流量主要是端到端模式,較為穩(wěn)定;而互聯(lián)網(wǎng)流量易受熱點內(nèi)容牽引,數(shù)據(jù)流量流向復(fù)雜和規(guī)模多變:比如雙十一購物狂潮,電商平臺訂單創(chuàng)建峰值達到58.3萬筆,要求通信網(wǎng)絡(luò)提供高并發(fā)支持;又如優(yōu)酷春節(jié)期間有超過23億人次上網(wǎng)刷劇、抖音拜年短視頻增長超10倍,需要通信網(wǎng)絡(luò)能夠靈活擴充帶寬。面對用戶動態(tài)多變的需求,通信網(wǎng)絡(luò)需要具備快速洞察和響應(yīng)用戶需求的能力,提供高效、彈性、智能的數(shù)據(jù)服務(wù)。
“隨著通信網(wǎng)絡(luò)管道十倍百倍加粗、節(jié)點數(shù)從千萬級逐漸躍升至百億千億級,如何‘接得住、存得下’海量數(shù)據(jù),成為網(wǎng)絡(luò)云資源池建設(shè)面臨的巨大考驗”,李輝表示。一直以來,作為新數(shù)據(jù)存儲首倡者和引領(lǐng)者,浪潮存儲攜手通信行業(yè)用戶,不斷 探索 提速通信網(wǎng)絡(luò)云基礎(chǔ)設(shè)施的各種姿勢。
早在2018年,浪潮存儲就參與了通信行業(yè)基礎(chǔ)設(shè)施建設(shè),四年內(nèi)累計交付約5000套存儲產(chǎn)品,涵蓋全閃存儲、高端存儲、分布式存儲等明星產(chǎn)品。其中在網(wǎng)絡(luò)云建設(shè)中,浪潮存儲已連續(xù)兩年兩次中標(biāo)全球最大的NFV網(wǎng)絡(luò)云項目,其中在網(wǎng)絡(luò)云二期建設(shè)中,浪潮存儲提供數(shù)千節(jié)點,為上層網(wǎng)元、應(yīng)用提供高效數(shù)據(jù)服務(wù)。在最新的NFV三期項目中,浪潮存儲也已中標(biāo)。
能夠與通信用戶在網(wǎng)絡(luò)云建設(shè)中多次握手,背后是浪潮存儲的持續(xù)技術(shù)投入與創(chuàng)新。浪潮存儲6年內(nèi)投入超30億研發(fā)經(jīng)費,開發(fā)了業(yè)界首個“多合一”極簡架構(gòu)的浪潮并行融合存儲系統(tǒng)。此存儲系統(tǒng)能夠統(tǒng)籌管理數(shù)千個節(jié)點,實現(xiàn)性能、容量線性擴展;同時基于浪潮iTurbo智能加速引擎的智能IO均衡、智能資源調(diào)度、智能元數(shù)據(jù)管理等功能,與自研NVMe SSD閃存盤進行系統(tǒng)級別聯(lián)調(diào)優(yōu)化,讓百萬級IO均衡落盤且路徑更短,將存儲系統(tǒng)性能發(fā)揮到極致。
“為了確保全球最大規(guī)模的網(wǎng)絡(luò)云正常上線運行,我們聯(lián)合用戶對存儲集群展開了長達數(shù)月的魔鬼測試”,浪潮存儲工程師表示。網(wǎng)絡(luò)云的IO以虛擬機數(shù)據(jù)和上層應(yīng)用數(shù)據(jù)為主,浪潮按照每個存儲集群支持15000臺虛機進行配置,分別對單卷隨機讀寫、順序?qū)?、混合讀寫以及全系統(tǒng)隨機讀寫的IO、帶寬、時延等指標(biāo)進行了360無死角測試,達到了通信用戶提出的單卷、系統(tǒng)性能不低于4萬和12萬IOPS、時延小于3ms的要求,產(chǎn)品成熟度得到了驗證。
以通信行業(yè)為例,2020年全國移動互聯(lián)網(wǎng)接入流量1656億GB,相當(dāng)于中國14億人每人消耗118GB數(shù)據(jù);其中春節(jié)期間,移動互聯(lián)網(wǎng)更是創(chuàng)下7天消耗36億GB數(shù)據(jù)流量的記錄,還“捎帶”打了548億分鐘電話、發(fā)送212億條短信……海量實時數(shù)據(jù)洪流,在網(wǎng)絡(luò)云資源池(NFV)支撐下收放自如,其中分布式存儲平臺發(fā)揮了作用。如此樣板工程,其巨大示范及拉動作用不言而喻。
a. SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴展,存儲方式可以省是JSON文檔、哈希表或者其他方式。
b. 在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary key),索引(index),觸發(fā)器(trigger),存儲過程(stored procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時候任何地方添加,不需要先定義表。
c. SQL中如果需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直
接放到原數(shù)據(jù)集中,以提高查詢效率。缺點也比較明顯,更新審核人數(shù)據(jù)的時候?qū)容^麻煩。
d. SQL 中可以使用JOIN表鏈接方式將多個關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對多個數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲方式存儲數(shù)據(jù)。
e. SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),而NoSQL中則沒有這種強耦合的概念,可以隨時刪除任何數(shù)據(jù)。
f. SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務(wù)來控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒有事務(wù)這個概念,每一個數(shù)據(jù)集的操作都是原子級的。
g. 在相同水平的系統(tǒng)設(shè)計的前提下,因為NoSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。
nosql是not only sql的意思。是近今年新發(fā)展起來的存儲系統(tǒng)。當(dāng)前使用最多的是key-value模型,用于處理超大規(guī)模的數(shù)據(jù)。
以下是摘自百度百科中的一部分
NoSQL 是非關(guān)系型數(shù)據(jù)存儲的廣義定義。它打破了長久以來關(guān)系型數(shù)據(jù)庫與ACID理論大一統(tǒng)的局面。NoSQL 數(shù)據(jù)存儲不需要固定的表結(jié)構(gòu),通常也不存在連接操作。在大數(shù)據(jù)存取上具備關(guān)系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢。該術(shù)語在 2009 年初得到了廣泛認(rèn)同。
當(dāng)今的應(yīng)用體系結(jié)構(gòu)需要數(shù)據(jù)存儲在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲就是為了實現(xiàn)這個需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業(yè) NoSQL 實現(xiàn)。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認(rèn)同。從這些NoSQL項目的名字上看不出什么相同之處:Hadoop、Voldemort、Dynomite,還有其它很多。
NoSQL與關(guān)系型數(shù)據(jù)庫設(shè)計理念比較
關(guān)系型數(shù)據(jù)庫中的表都是存儲一些格式化的數(shù)據(jù)結(jié)構(gòu),每個元組字段的組成都一樣,即使不是每個元組都需要所有的字段,但數(shù)據(jù)庫會為每個元組分配所有的字段,這樣的結(jié)構(gòu)可以便于表與表之間進行連接等操作,但從另一個角度來說它也是關(guān)系型數(shù)據(jù)庫性能瓶頸的一個因素。而非關(guān)系型數(shù)據(jù)庫以鍵值對存儲,它的結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,這樣就不會局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷。
NoSQL數(shù)據(jù)庫 ——FoundationDB的鍵-值存儲系統(tǒng)
FoundationDB是一個分布式的鍵-值存儲系統(tǒng),支持全局ACID事務(wù)操作,并且性能出眾。在安裝系統(tǒng)時,可以指定數(shù)據(jù)分發(fā)的級別。數(shù)據(jù)分發(fā)為容錯性提供了支持:當(dāng)某個服務(wù)器或網(wǎng)絡(luò)的某部分產(chǎn)生故障時,數(shù)據(jù)庫仍然可以正常操作,你的應(yīng)用也不會受到影響。
鍵-值與SQL架構(gòu)
我們開發(fā)的這套架構(gòu)能夠在鍵-值存儲系統(tǒng)上支持多個層,每個層都能夠在FoundationDB的基礎(chǔ)上提供一套不同的數(shù)據(jù)模型,例如SQL數(shù)據(jù)庫、文檔數(shù)據(jù)庫或圖形數(shù)據(jù)庫。許多使用者也自行創(chuàng)建了自定義的層。
下圖中列出架構(gòu)中的了關(guān)鍵部分。處于最底層的是FoundationDB集群,無論集群的實際大小如何,對它的操作與一個單獨的邏輯數(shù)據(jù)庫并沒有分別。SQL層則以一種無狀態(tài)的中間層方式運行在鍵-值存儲系統(tǒng)之上。這一層通過SQL與應(yīng)用程序進行通信,并使用FoundationDB的客戶端API與鍵-值存儲系統(tǒng)進行通信。由于SQL層是無狀態(tài)的,因此可以并行地運行任意數(shù)據(jù)的SQL層。
nosql數(shù)據(jù)庫的四種類型如下:
1.key-value鍵值存儲數(shù)據(jù)庫:
相關(guān)產(chǎn)品: Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached.
主要應(yīng)用: 內(nèi)容緩存,處理大量數(shù)據(jù)的高負(fù)載訪問,也用于系統(tǒng)日志。
優(yōu)點:查找速度快,大量操作時性能高。
2.列存儲數(shù)據(jù)庫:
相關(guān)產(chǎn)品: BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS.
主要應(yīng)用: 分布式數(shù)據(jù)的儲存與管理。
優(yōu)點:查找速度快,可擴展性強,容易進行分布式擴展。
缺點:功能相對局限。
3.文檔型數(shù)據(jù)庫
相關(guān)產(chǎn)品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit.
主要應(yīng)用: web應(yīng)用,管理面向文檔的數(shù)據(jù)或者類似的半結(jié)構(gòu)化數(shù)據(jù)。
優(yōu)點:數(shù)據(jù)結(jié)構(gòu)靈活,表結(jié)構(gòu)可變,復(fù)雜性低。
缺點:查詢效率低,且缺乏統(tǒng)一的查詢語言。
4.Graph圖形數(shù)據(jù)庫
相關(guān)產(chǎn)品: Neo4J、OrientDB、InfoGrid、GraphDB.
主要應(yīng)用: 復(fù)雜,互連接,低結(jié)構(gòu)化的圖結(jié)構(gòu)場合, 專注構(gòu)建關(guān)系圖譜。
優(yōu)點: 利用圖結(jié)構(gòu)相關(guān)算法, 可用于構(gòu)建復(fù)雜的關(guān)系圖譜。
缺點: 復(fù)雜度高。
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關(guān)系型數(shù)據(jù)庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化查詢語言(SQL)
數(shù)據(jù)和關(guān)系都存儲在單獨的表中。
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴(yán)格的一致性
基礎(chǔ)事務(wù)
ACID
關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則
事務(wù)在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個操作失敗,整個事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務(wù)的運行不會改變數(shù)據(jù)庫原本的一致性約束。
I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務(wù)之間不會互相影響,如果一個事務(wù)要訪問的數(shù)據(jù)正在被另外一個事務(wù)修改,只要另外一個事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務(wù)提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預(yù)定義的模式
鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
最終一致性,而非ACID屬性
非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應(yīng)性能
Partition tolerance(分區(qū)容錯性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。
定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。
CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通常可能對一致性要求低一些。
CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點。
而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。
所以我們只能在一致性和可用性之間進行權(quán)衡,沒有NoSQL系統(tǒng)能同時保證這三點。
說明:C:強一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫
AP:大多數(shù)網(wǎng)站架構(gòu)的選擇
CP:Redis、Mongodb
注意:分布式架構(gòu)的時候必須做出取舍。
一致性和可用性之間取一個平衡。多余大多數(shù)web應(yīng)用,其實并不需要強一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產(chǎn)品的方向。
4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用
當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。
代表項目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設(shè)備,也很貴的。
難點:
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構(gòu)。
數(shù)據(jù)源改造而服務(wù)平臺不需要大面積重構(gòu)。