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

熱線電話:13121318867

登錄
首頁精彩閱讀谷歌的數(shù)據(jù)分析怎么它就這么快?_數(shù)據(jù)分析師
谷歌的數(shù)據(jù)分析怎么它就這么快?_數(shù)據(jù)分析師
2014-11-11
收藏

谷歌的數(shù)據(jù)分析怎么它就這么快_數(shù)據(jù)分析師


       谷歌分析存儲(chǔ)了大量統(tǒng)計(jì)數(shù)據(jù),包括來自世界各地的互聯(lián)網(wǎng)網(wǎng)站統(tǒng)計(jì)數(shù)據(jù)。檢索功能可以從如此巨量的數(shù)據(jù)中快速返回要求谷歌具備特殊的解決方案,必須要滿足在任何時(shí)候有更多數(shù)據(jù)需要存儲(chǔ)時(shí)能很容易地?cái)U(kuò)展。
      在谷歌,任何時(shí)候都要能給基礎(chǔ)設(shè)施中添加任意數(shù)量的應(yīng)用,每個(gè)應(yīng)用都可能帶來極其繁重的負(fù)載。這類請(qǐng)求的資源很難被滿足,尤其是在有限時(shí)間內(nèi)要把必要的更新做完。
      如果谷歌在單個(gè)服務(wù)器節(jié)點(diǎn)上使用經(jīng)典的關(guān)系型數(shù)據(jù)庫,那么每次容量達(dá)到極限,他們都需要升級(jí)硬件??紤]到待創(chuàng)建應(yīng)用程序和數(shù)據(jù)的量是被谷歌使用的,這類更新可能很有必要成為一項(xiàng)每天都做的日常工作。
      負(fù)載也可以在多個(gè)服務(wù)器節(jié)點(diǎn)共享,但是一旦需要更多節(jié)點(diǎn),系統(tǒng)會(huì)變得非常復(fù)雜而極其難以維護(hù)。
      考慮到這些因素,標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫配置就不再是特別適合的選擇,因?yàn)閷?duì)系統(tǒng)這么大規(guī)模的升級(jí)和維護(hù)太困難了。
尋找可擴(kuò)展解決方案
      為保證速度和可靠性,這種快速應(yīng)急升級(jí)的做法是不必要的。谷歌使用自己的數(shù)據(jù)存儲(chǔ)解決方案,叫做“BigTable”。與存儲(chǔ)在關(guān)系型表中的數(shù)據(jù)不同,數(shù)據(jù)是以多維排序映射存儲(chǔ)的。
      這種類型的實(shí)現(xiàn)立足于廣為人知的一種存儲(chǔ)方式,就是“key-value”(鍵值)存儲(chǔ)方式。這種存儲(chǔ)方式可以提供一些性能優(yōu)勢(shì),是擴(kuò)展過程更容易。
      關(guān)系型數(shù)據(jù)庫中的信息存儲(chǔ)
      關(guān)系型數(shù)據(jù)庫在一個(gè)地方存儲(chǔ)每一條信息,通常稱為表中的列。對(duì)于關(guān)系型數(shù)據(jù)庫,保證數(shù)據(jù)規(guī)范化非常重要。這個(gè)過程可以確保在其它表或者列中沒有重復(fù)數(shù)據(jù)。
      例如,客戶的名字總是應(yīng)該存儲(chǔ)在特定表的特定列中。如果客戶名字在數(shù)據(jù)庫的另一個(gè)表或另一列中出現(xiàn)了,那么它應(yīng)該刪除掉,應(yīng)該引用從原來的表和列中提取信息。
      這種結(jié)構(gòu)的缺點(diǎn)是數(shù)據(jù)庫內(nèi)部會(huì)變得十分復(fù)雜。甚至相對(duì)簡(jiǎn)單的查詢也會(huì)經(jīng)過許多路徑才能執(zhí)行,在運(yùn)行時(shí)候必須找到所有這些路徑評(píng)估其運(yùn)行時(shí)間才能知道如何做性能最優(yōu)。數(shù)據(jù)庫變得越復(fù)雜,運(yùn)行時(shí)需要判斷查詢路徑就會(huì)需要越多的資源。
      以key/Value(鍵值)形式存儲(chǔ)的信息
      在key/Value鍵值形式的存儲(chǔ)結(jié)構(gòu)中,復(fù)制數(shù)據(jù)是可以接受的。主要思路是利用磁盤空間而不是其它硬件資源,磁盤空間相對(duì)容易獲取,成本效率更容易升級(jí)(尤其是在云環(huán)境中),其它硬件資源要提速代價(jià)更昂貴。
      從簡(jiǎn)化查詢方面考慮,數(shù)據(jù)復(fù)制是非常有益的,因?yàn)橄嚓P(guān)信息可以存儲(chǔ)在一起,避免查詢數(shù)據(jù)時(shí)需要經(jīng)過許多路徑。
      與關(guān)系型數(shù)據(jù)庫使用表結(jié)構(gòu)不同,鍵值存儲(chǔ)方式使用域的概念。域是一個(gè)存放數(shù)據(jù)的存儲(chǔ)區(qū),它不需要預(yù)定義結(jié)構(gòu)。域內(nèi)的數(shù)據(jù)片段是通過“鍵”定義的,這些“鍵”可以有任意數(shù)量的屬性與它們相關(guān)聯(lián)。
      屬性可以是簡(jiǎn)單的字符串值,也可以是更復(fù)雜的結(jié)構(gòu),可以與流行編程語言中的數(shù)據(jù)類型相匹配。包括數(shù)組,對(duì)象,整數(shù),浮點(diǎn)數(shù),布爾型值,以及編程中的其它基本數(shù)據(jù)類型。
      在鍵值存儲(chǔ)方式中,數(shù)據(jù)完整性和邏輯在應(yīng)用程序代碼中處理(需要使用一個(gè)或者多個(gè)API),而不是通過數(shù)據(jù)庫本身的結(jié)構(gòu)來處理。這樣一來,數(shù)據(jù)提取就變成了使用正確的編程邏輯的事,而不是依賴于數(shù)據(jù)庫優(yōu)化器基于需要訪問的關(guān)系從大量可能路徑中選擇查詢路徑。

關(guān)系型數(shù)據(jù)庫和鍵值數(shù)據(jù)庫訪問數(shù)據(jù)的差異。
      獲得結(jié)果
      谷歌需要存儲(chǔ)和提取許多應(yīng)用程序的大量數(shù)據(jù),包括谷歌分析、谷歌地圖、Gmail和熱門搜索的web索引數(shù)據(jù)。此外,在任何時(shí)候都要添加更多應(yīng)用和數(shù)據(jù)存儲(chǔ),這個(gè)因素就使得BigTable的鍵值存儲(chǔ)成為可擴(kuò)容性的理想方案。
      BigTable是谷歌自己的定制解決方案,那么企業(yè)如何獲得類似性能和擴(kuò)展性使其用戶獲得更好的體驗(yàn)?zāi)?好消息是還有其它鍵值存儲(chǔ)方案可用,有的可以在云服務(wù)中作為服務(wù)運(yùn)行。這類服務(wù)很容易擴(kuò)展,因?yàn)樵谠骗h(huán)境中更多數(shù)據(jù)存儲(chǔ)很容易購買獲得。
      鍵值存儲(chǔ)方案
      有幾種鍵值存儲(chǔ)數(shù)據(jù)庫可供選擇。其中之一就是Mongo,它是以對(duì)象數(shù)據(jù)庫形式設(shè)計(jì)的,以JSON格式存儲(chǔ)信息。這種格式在web應(yīng)用中很理想,因?yàn)镴SON數(shù)據(jù)很容易作為一種標(biāo)注格式在各種需要的應(yīng)用之間傳遞數(shù)據(jù)。
      例如,Mongo是MEAN堆棧的一部分:Mongo,Express,AngularJS和NodeJS是程序員們開發(fā)應(yīng)用的一套流行搭配。每一部分都 需要與其它部分發(fā)送交互數(shù)據(jù)。所有的一切,包括數(shù)據(jù)庫,都可以使用JSON格式,在各部分之間傳遞數(shù)據(jù)變得更加容易和規(guī)范統(tǒng)一。

MySQL與Mongo執(zhí)行相同任務(wù)代碼比較圖
如何使用Mongo
      Mongo可以在各種操作系統(tǒng)上安裝使用,包括Windows,Linux和OSX。這樣,數(shù)據(jù)庫的擴(kuò)展就簡(jiǎn)單了,只要在所安裝的服務(wù)器上添加存儲(chǔ)空間就行了。
      另一種方案是在云環(huán)境中把Mongo用作服務(wù)。這樣便于擴(kuò)展,任何時(shí)候都可以向服務(wù)同樣是發(fā)起請(qǐng)求要求必要的存儲(chǔ)空間。這樣一來,新的應(yīng)用和更多數(shù)據(jù)存儲(chǔ)需求就可以快速高效地處理了。
      Morpheus就是這種服務(wù)中的出色候選者,它在云環(huán)境中提供Mongo服務(wù)高擴(kuò)展性:Morpheus的用戶可以有三個(gè)共享的節(jié)點(diǎn),完整數(shù)據(jù)集,可以 無縫提供MongoDB實(shí)例。此外,所有服務(wù)都運(yùn)行在高性能固態(tài)硬盤(SSD)基礎(chǔ)設(shè)施上,這是非常可靠的數(shù)據(jù)存儲(chǔ)介質(zhì)。使用Morpheus高擴(kuò)展性數(shù) 據(jù)庫即服務(wù)可以在任何時(shí)候保持運(yùn)行狀態(tài)。(文章來源:CDA數(shù)據(jù)分析師

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

若不方便掃碼,搜微信號(hào):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)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".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 = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+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); }