
Big Data是近來(lái)的一個(gè)技術(shù)熱點(diǎn),但從名字就能判斷它并不是什么新詞。畢竟,大是一個(gè)相對(duì)概念。歷史上,數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)集市等信息管理領(lǐng)域的技術(shù),很大程度上也是為了解決大規(guī)模數(shù)據(jù)的問(wèn)題。被譽(yù)為數(shù)據(jù)倉(cāng)庫(kù)之父的Bill Inmon早在20世紀(jì)90年代就經(jīng)常將Big Data掛在嘴邊了。
然而,Big Data作為一個(gè)專(zhuān)有名詞成為熱點(diǎn),主要應(yīng)歸功于近年來(lái)互聯(lián)網(wǎng)、云計(jì)算、移動(dòng)和物聯(lián)網(wǎng)的迅猛發(fā)展。無(wú)所不在的移動(dòng)設(shè)備、RFID、無(wú)線(xiàn)傳感器每分每秒都在產(chǎn)生數(shù)據(jù),數(shù)以?xún)|計(jì)用戶(hù)的互聯(lián)網(wǎng)服務(wù)時(shí)時(shí)刻刻在產(chǎn)生巨量的交互……要處理的數(shù)據(jù)量實(shí)在是太大、增長(zhǎng)太快了,而業(yè)務(wù)需求和競(jìng)爭(zhēng)壓力對(duì)數(shù)據(jù)處理的實(shí)時(shí)性、有效性又提出了更高要求,傳統(tǒng)的常規(guī)技術(shù)手段根本無(wú)法應(yīng)付。
在這種情況下,技術(shù)人員紛紛研發(fā)和采用了一批新技術(shù),主要包括分布式緩存、基于MPP的分布式數(shù)據(jù)庫(kù)、分布式文件系統(tǒng)、各種NoSQL分布式存儲(chǔ)方案等。
10年前,Eric Brewer提出著名的CAP定理,指出:一個(gè)分布式系統(tǒng)不可能滿(mǎn)足一致性、可用性和分區(qū)容忍性這三個(gè)需求,最多只能同時(shí)滿(mǎn)足兩個(gè)。系統(tǒng)的關(guān)注點(diǎn)不同,采用的策略也不一樣。只有真正理解了系統(tǒng)的需求,才有可能利用好CAP定理。
架構(gòu)師一般有兩個(gè)方向來(lái)利用CAP理論。
Key-Value存儲(chǔ),如Amazon Dynamo等,可以根據(jù)CAP理論靈活選擇不同傾向的數(shù)據(jù)庫(kù)產(chǎn)品。
領(lǐng)域模型+分布式緩存+存儲(chǔ),可根據(jù)CAP理論結(jié)合自己的項(xiàng)目定制靈活的分布式方案,但難度較高。
對(duì)大型網(wǎng)站,可用性與分區(qū)容忍性?xún)?yōu)先級(jí)要高于數(shù)據(jù)一致性,一般會(huì)盡量朝著A、P的方向設(shè)計(jì),然后通過(guò)其他手段保證對(duì)于一致性的商務(wù)需求。架構(gòu)設(shè)計(jì)師不要將精力浪費(fèi)在如何設(shè)計(jì)能滿(mǎn)足三者的完美分布式系統(tǒng),而應(yīng)該懂得取舍。
不同的數(shù)據(jù)對(duì)一致性的要求是不同的。SNS網(wǎng)站可以容忍相對(duì)較長(zhǎng)時(shí)間的不一致,而不影響交易和用戶(hù)體驗(yàn);而像支付寶這樣的交易和賬務(wù)數(shù)據(jù)則是非常敏感的,通常不能容忍超過(guò)秒級(jí)的不一致。
Cache篇
緩存在Web開(kāi)發(fā)中運(yùn)用越來(lái)越廣泛,mem-cached是danga.com(運(yùn)營(yíng)LiveJournal的技術(shù)團(tuán)隊(duì))開(kāi)發(fā)的一套分布式內(nèi)存對(duì)象緩存系統(tǒng),用于在動(dòng)態(tài)系統(tǒng)中減少數(shù)據(jù)庫(kù)負(fù)載,提升性能。
memcached具有以下特點(diǎn):
協(xié)議簡(jiǎn)單;基于libevent的事件處理;內(nèi)置內(nèi)存存儲(chǔ)方式;memcached不互相通信的分布式。
memcached處理的原子是每一個(gè)(Key,Value)對(duì)(以下簡(jiǎn)稱(chēng)KV對(duì)),Key會(huì)通過(guò)一個(gè)hash算法轉(zhuǎn)化成hash-Key,便于查找、對(duì)比以及做到盡可能的散列。同時(shí),memcached用的是一個(gè)二級(jí)散列,通過(guò)一張大hash表來(lái)維護(hù)。
memcached由兩個(gè)核心組件組成:服務(wù)端(ms)和客戶(hù)端(mc),在一個(gè)memcached的查詢(xún)中,ms先通過(guò)計(jì)算Key的hash值來(lái)確定KV對(duì)所處在的ms位置。當(dāng)ms確定后,mc就會(huì)發(fā)送一個(gè)查詢(xún)請(qǐng)求給對(duì)應(yīng)的ms,讓它來(lái)查找確切的數(shù)據(jù)。因?yàn)檫@之間沒(méi)有交互以及多播協(xié)議,所以memcached交互帶給網(wǎng)絡(luò)的影響是最小化的。
MemcacheDB是一個(gè)分布式、Key-Value形式的持久存儲(chǔ)系統(tǒng)。它不是一個(gè)緩存組件,而是一個(gè)基于對(duì)象存取的、可靠的、快速的持久存儲(chǔ)引擎。協(xié)議與memcached一致(不完整),所以很多memcached客戶(hù)端都可以跟它連接。MemcacheDB采用Berkeley DB作為持久存儲(chǔ)組件,因此很多Berkeley DB的特性它都支持。
類(lèi)似這樣的產(chǎn)品也很多,如淘寶Tair就是Key-Value結(jié)構(gòu)存儲(chǔ),在淘寶得到了廣泛使用。后來(lái)Tair也做了一個(gè)持久化版本,思路基本與新浪MemcacheDB一致。
分布式數(shù)據(jù)庫(kù)篇
支付寶公司在國(guó)內(nèi)最早使用Greenplum數(shù)據(jù)庫(kù),將數(shù)據(jù)倉(cāng)庫(kù)從原來(lái)的Oracle RAC平臺(tái)遷移到Greenplum集群。Greenplum強(qiáng)大的計(jì)算能力用來(lái)支持支付寶日益發(fā)展的業(yè)務(wù)需求。
Greenplum數(shù)據(jù)引擎軟件專(zhuān)為新一代數(shù)據(jù)倉(cāng)庫(kù)所需的大規(guī)模數(shù)據(jù)和復(fù)雜查詢(xún)功能所設(shè)計(jì),基于MPP(海量并行處理)和Shared-Nothing(完全無(wú)共享)架構(gòu),基于開(kāi)源軟件和x86商用硬件設(shè)計(jì)(性?xún)r(jià)比更高)。
分布式文件系統(tǒng)篇
談到分布式文件系統(tǒng),不得不提的是Google的GFS?;诖罅堪惭b有Linux操作系統(tǒng)的普通PC構(gòu)成的集群系統(tǒng),整個(gè)集群系統(tǒng)由一臺(tái)Master(通常有幾臺(tái)備份)和若干臺(tái)TrunkServer構(gòu)成。GFS中文件備份成固定大小的Trunk分別存儲(chǔ)在不同的TrunkServer上,每個(gè)Trunk有多份(通常為3份)拷貝,也存儲(chǔ)在不同的TrunkServer上。Master負(fù)責(zé)維護(hù)GFS中的 Metadata,即文件名及其Trunk信息??蛻?hù)端先從Master上得到文件的Metadata,根據(jù)要讀取的數(shù)據(jù)在文件中的位置與相應(yīng)的TrunkServer通信,獲取文件數(shù)據(jù)。
在Google的論文發(fā)表后,就誕生了Hadoop。截至今日,Hadoop被很多中國(guó)最大互聯(lián)網(wǎng)公司所追捧,百度的搜索日志分析,騰訊、淘寶和支付寶的數(shù)據(jù)倉(cāng)庫(kù)都可以看到Hadoop的身影。
Hadoop具備低廉的硬件成本、開(kāi)源的軟件體系、較強(qiáng)的靈活性、允許用戶(hù)自己修改代碼等特點(diǎn),同時(shí)能支持海量數(shù)據(jù)存儲(chǔ)和計(jì)算任務(wù)。
Hive是一個(gè)基于Hadoop的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái),將轉(zhuǎn)化為相應(yīng)的MapReduce程序基于Hadoop執(zhí)行。通過(guò)Hive,開(kāi)發(fā)人員可以方便地進(jìn)行ETL開(kāi)發(fā)。
如圖3所示,引用一張F(tuán)acebook工程師做的Hive和Hadoop的關(guān)系圖。
NoSQL篇
隨著數(shù)據(jù)量增長(zhǎng),越來(lái)越多的人關(guān)注NoSQL,特別是2010年下半年,F(xiàn)acebook選擇HBase來(lái)做實(shí)時(shí)消息存儲(chǔ)系統(tǒng),替換原來(lái)開(kāi)發(fā)的Cassandra系統(tǒng)。這使得很多人開(kāi)始關(guān)注HBase。Facebook選擇HBase是基于短期小批量臨時(shí)數(shù)據(jù)和長(zhǎng)期增長(zhǎng)的很少被訪(fǎng)問(wèn)到的數(shù)據(jù)這兩個(gè)需求來(lái)考慮的。
HBase是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。HBase是BigTable的開(kāi)源實(shí)現(xiàn),使用HDFS作為其文件存儲(chǔ)系統(tǒng)。Google運(yùn)行MapReduce來(lái)處理BigTable中的海量數(shù)據(jù),HBase同樣利用MapReduce來(lái)處理HBase中的海量數(shù)據(jù);BigTable利用Chubby作為協(xié)同服務(wù),HBase則利用Zookeeper作為對(duì)應(yīng)。
總結(jié)篇
近來(lái)NoSQL數(shù)據(jù)庫(kù)的使用越來(lái)越普及,幾乎所有的大型互聯(lián)網(wǎng)公司都在這個(gè)領(lǐng)域進(jìn)行著實(shí)踐和探索。在享受了這類(lèi)數(shù)據(jù)庫(kù)與生俱來(lái)的擴(kuò)展性、容錯(cuò)性、高讀寫(xiě)吞吐外(盡管各主流NoSQL仍在不斷完善中),越來(lái)越多的實(shí)際需求把人們帶到了NoSQL并不擅長(zhǎng)的其他領(lǐng)域,比如搜索、準(zhǔn)實(shí)時(shí)統(tǒng)計(jì)分析、簡(jiǎn)單事務(wù)等。實(shí)踐中一般會(huì)在NoSQL的外圍組合一些其他技術(shù)形成一個(gè)整體解決方案。
準(zhǔn)實(shí)時(shí)的統(tǒng)計(jì)分析
FlumeBase:可參考 http://flumebase.org/documentation/0.1.0/UserGuide.html中的quick start和architecture兩部分。
S4:Yahoo!開(kāi)源數(shù)據(jù)來(lái)流計(jì)算實(shí)時(shí)框架,可參考
查詢(xún)時(shí)統(tǒng)計(jì)分析,結(jié)果集較小時(shí),可以直接在返回前做統(tǒng)計(jì)分析處理。
比如買(mǎi)家消費(fèi)記錄查詢(xún)的HBase實(shí)現(xiàn),Schema設(shè)計(jì),rowkey=uid,column=搜索詞和查詢(xún)值,version=交易id。
搜索相關(guān)
充分利用NoSQL(比如HBase)內(nèi)部數(shù)據(jù)的有序性、Row Key、Column Family、Version Timestamp。
我們用“HBase+二次索引”來(lái)實(shí)現(xiàn)實(shí)時(shí)營(yíng)銷(xiāo)的解決方案。也可以參考Facebook Message的解決方案:http://blog.bluedavy.com/?p=258。
構(gòu)建一個(gè)外圍系統(tǒng)完成索引建立。
Google MegaStore:原文鏈接為http://www.cidrdb.org/cidr2011/Papers/CIDR11_Paper32.pdf,中文譯文鏈接為http://cloud.csdn.net/a/20110216/291968.html。
也有人開(kāi)始嘗試基于HBase的MegaStore實(shí)現(xiàn),鏈接為https://github.com/drevell/megalon。
簡(jiǎn)單事務(wù)
事務(wù)處理服務(wù) + NoSQL存儲(chǔ)。
淘寶開(kāi)發(fā)的千億級(jí)海量數(shù)據(jù)庫(kù)Oceanbase,通過(guò)update server角色執(zhí)行將寫(xiě)操作限制在一臺(tái)機(jī)器上,實(shí)現(xiàn)事務(wù)。參考鏈接為:http://www.nosqlnotes.net/archives/170。
Google MegaStore通過(guò)為用戶(hù)提供機(jī)制,根據(jù)應(yīng)用特點(diǎn)劃分entity group,將事務(wù)涉及的數(shù)據(jù)分布到一臺(tái)機(jī)器上,實(shí)現(xiàn)事務(wù)。本文:http://www.3lll3.cn/
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話(huà)題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10