99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁職業(yè)發(fā)展大數(shù)據(jù)架構(gòu)的未來
大數(shù)據(jù)架構(gòu)的未來
2016-09-17
收藏

數(shù)據(jù)架構(gòu)的未來

本文講述了大數(shù)據(jù)的相關(guān)問題,以及“大數(shù)據(jù)架構(gòu)”得名的由來。

大數(shù)據(jù)的問題
或許所有讀者都明白這一點:數(shù)據(jù)正在飛速增長。若是能夠有效利用的話,我們能從這些數(shù)據(jù)中找到非常有價值的見解;傳統(tǒng)技術(shù)有很多都是在40年前設(shè)計的,比如RDBMSs,不足以創(chuàng)造“大數(shù)據(jù)”炒作所宣稱的商業(yè)價值。在大數(shù)據(jù)技術(shù)的使用上,常見的案例是“客戶單一視圖”;將關(guān)于客戶所知道的一切內(nèi)容放在一起,以便最大化服務(wù)提供與自身收入,比如確定具體需要采用什么促銷方式,又是在什么時候、通過什么渠道來發(fā)送。
盡管大數(shù)據(jù)的問題在于,讓我們將這種潛力變?yōu)楝F(xiàn)實,高等級的關(guān)鍵功能至少包括下面這些能力:
合并信息孤井、外在因素與數(shù)據(jù)流;
控制數(shù)據(jù)訪問;

需要轉(zhuǎn)化數(shù)據(jù);

整合數(shù)據(jù);
為數(shù)據(jù)分析提供工具;
發(fā)布數(shù)據(jù)報告;
將見解體現(xiàn)在運(yùn)營過程中;
最小化工作完成的總擁有成本與響應(yīng)時間。
數(shù)據(jù)湖作為答案
很多公司正在觀望一個被某些人稱為數(shù)據(jù)湖的架構(gòu),這個數(shù)據(jù)平臺在合并信息孤井?dāng)?shù)據(jù)流以及在單獨的邏輯位置中執(zhí)行數(shù)據(jù)持久化方面具有靈活性,能夠從企業(yè)自身以及第三方的數(shù)據(jù)中挖掘出見解。將Hadoop(包括Spark在內(nèi))用于數(shù)據(jù)湖已成大勢所趨,原因很多:使用總擁有成本較低的普通硬件就能進(jìn)行擴(kuò)展,允許用讀時模式(schema-on-read)收取大量數(shù)據(jù),支持開源,包括用SQL和普通語言構(gòu)建分布式處理層。此外,像雅虎和谷歌這樣的webscale公司都是早期標(biāo)桿,借用這種架構(gòu)在解決網(wǎng)站索引相關(guān)的問題時獲得了巨大的成功。
Hadoop中的數(shù)據(jù)持久化選項
這樣一來,從這里開始評估數(shù)據(jù)湖解決方案的前景似乎很合理。一旦開始從更深的層次理解Hadoop的內(nèi)涵,你就會發(fā)現(xiàn)里面所包含的項目真的是包羅萬象,涵蓋了數(shù)據(jù)處理的方方面面。用Hadoop數(shù)據(jù)湖中探測存儲的數(shù)據(jù)時,有兩個主要選項:HDFS和HBase。使用HDFS時,可以自行決定如何在只添加文件中對數(shù)據(jù)進(jìn)行編碼,包括JSON、CSV、Avro等等,因為HDFS只是一個文件系統(tǒng),編碼方式全由你決定。相反,HBase是一個數(shù)據(jù)庫,其特有的數(shù)據(jù)編碼方式可以將記錄寫入的速度最優(yōu)化,在通過主鍵查詢時執(zhí)行只讀的速度相對也很快。
這也是用Hadoop數(shù)據(jù)湖之魅力所在,它能實現(xiàn)真實情況下的需求。因此,我們就能使用Hadoop來執(zhí)行上面列出的高層次需求了。在像Spark和Hive這樣的Hadoop生態(tài)系統(tǒng)中,仍需用到分布式處理層,但不需HDFS或HBase了,因此你可以從分布式處理層中選擇持久化層面。之前的博文中有相關(guān)案例,描述了使用Spark在MongoDB中讀寫數(shù)據(jù)。還有一篇博文也很類似,證明了MongoDB只是讀取數(shù)據(jù)的另一個Hive表格。
索引仍舊很重要
大多熟悉RDBMSs的技術(shù)人員發(fā)現(xiàn),從表達(dá)查詢能力到二級索引,再到加速查詢?nèi)純r值巨大(即便模式固定、總擁有成本高以及RDBMSs的可擴(kuò)展性有限,這些使得它很難被用作數(shù)據(jù)湖)。如果我們在數(shù)據(jù)庫持久化中只用到HDFS和HBase,就無法實現(xiàn)我們期待的數(shù)據(jù)庫臨時索引了,特別是遇到下面幾個限制時:
臨時切片:不通過二級索引,我們?nèi)绾螌Σ恢挂粋€主鍵標(biāo)識出的數(shù)據(jù)切片進(jìn)行有效地分析呢,例如對我們的最佳客戶——那些消費(fèi)金額超過X的客戶進(jìn)行分析?由于數(shù)據(jù)太過巨大,想要通過掃描找出最佳客戶都會令工作卡住。
低延遲報告:如果沒有靈活的索引方式,我們?nèi)绾卧诖蚊爰墪r間內(nèi)響應(yīng)客戶的需求,為他們提供有價值的數(shù)據(jù)報告呢?再次,我們只能使用消費(fèi)者的賬戶號或者其他主鍵來進(jìn)行快速報告,而不是通過消費(fèi)者的姓名、電話號碼、郵編、花費(fèi)等等。特別提到:MongoDB剛剛為基于SQL的報告工具發(fā)布了BI Connector。
運(yùn)營化:同樣地,我們?nèi)绾螌⒂袃r值的見解引入應(yīng)用運(yùn)營中,從而在最大化影響公司和消費(fèi)者的同時將數(shù)據(jù)變現(xiàn)?想象一下客服專員(CSR)告知消費(fèi)者,因為數(shù)據(jù)湖僅支持這個主鍵,他必須提供賬號才能查詢所有的信息;或者查詢需要10分鐘時間。
當(dāng)然,其中有些問題可以通過變通方法解決,不過會導(dǎo)致總擁有成本更高、開發(fā)或運(yùn)營工作更多、延遲也更高。例如,使用搜索引擎或者實體化視圖而不是通過主鍵來查詢;不過稍后還需返回到數(shù)據(jù)庫,在有完整記錄的數(shù)據(jù)庫中對主表進(jìn)行再次查詢,以獲得所需的完整信息。除了延遲翻倍之外,還需要耗費(fèi)額外的管理、開發(fā)工作,以及單獨搜索引擎需要的基礎(chǔ)設(shè)施,還有實體化視圖所需的維護(hù),加上將數(shù)據(jù)寫入到其他地方造成的一致性問題。保持我們的設(shè)計原則,只用我們用慣的普通靈活索引不是很好么?
MongoDB是一個有效數(shù)據(jù)湖的重要部分
我們開始討論,探索單用Hadoop是否能滿足數(shù)據(jù)湖的需求,并發(fā)現(xiàn)了至少3個問題。我們能否在架構(gòu)中另加一層持久化層面來解決這些問題,同時保持設(shè)計原則——使用低總擁有成本的普通硬件、開源模式、讀時模式還有Hadoop分布式數(shù)據(jù)層——與之前一致呢?
我選擇本文的主題是因為,MongoDB就是在Hadoop-only數(shù)據(jù)湖中,補(bǔ)位最優(yōu)秀的數(shù)據(jù)庫。如果使用另一個開源NoSQL數(shù)據(jù)庫,就會發(fā)現(xiàn)其中幾乎不含二級索引(使用二級索引會導(dǎo)致無法同步數(shù)據(jù)),也沒有分組和聚合功能。你可以使用其中一些數(shù)據(jù)庫將數(shù)據(jù)寫入數(shù)據(jù)湖,不過如果出于商業(yè)需求想要以靈活的方式使用二級索引讀取的話,是做不到的。如果想要在數(shù)據(jù)湖中使用開源RDBMS,我們已經(jīng)說過,它們固定的模式、昂貴的垂直擴(kuò)展模型都違背了我們設(shè)計數(shù)據(jù)湖的原則。
因此,推薦使用下面的架構(gòu)來構(gòu)建數(shù)據(jù)湖。
MongoDB對數(shù)據(jù)湖非常重要
圖片描述
這個架構(gòu)將MongoDB作為持久化層面加入任何需要表達(dá)查詢的數(shù)據(jù)集中,正與你需要索引的三個原因(上面列舉了)相關(guān)。由于需求數(shù)據(jù)來自消費(fèi)者,無論是否將數(shù)據(jù)發(fā)布到HDFS和/或MongoDB中,我推薦用governance function來確定。無論存儲到HDFS或者M(jìn)ongoDB上,就可以運(yùn)行分布式處理任務(wù),比如Hive和Spark。不過如果數(shù)據(jù)在MongoDB上,因為篩選標(biāo)準(zhǔn)下放到數(shù)據(jù)庫中,不像在HDFS中那樣掃描文件,你就能在數(shù)據(jù)臨時切片上運(yùn)行有效分析了。與此相似,MongoDB中的數(shù)據(jù)也可用于實時、低延遲報告,并為構(gòu)建的應(yīng)用所用到的所有系統(tǒng)提供運(yùn)營數(shù)據(jù)平臺服務(wù)。
如今一些公司只是將數(shù)據(jù)復(fù)制到Hadoop中進(jìn)行轉(zhuǎn)換,然后再復(fù)制到其他地方,用于完成有價值的工作。為什么不直接利用數(shù)據(jù)湖,發(fā)揮最大價值呢?使用MongoDB可以將價值多次翻倍。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }