提高java吞吐量的方法 高級數(shù)據(jù)庫,數(shù)據(jù)倉庫有哪些關(guān)鍵技術(shù)?
高級數(shù)據(jù)庫,數(shù)據(jù)倉庫有哪些關(guān)鍵技術(shù)?總是想收拾好看看這塊內(nèi)容,呢既然是漫談,就想起了什么說什么吧。我始終是在互聯(lián)網(wǎng)行業(yè),就以互聯(lián)網(wǎng)行業(yè)來說。先大概列下互聯(lián)網(wǎng)行業(yè)數(shù)據(jù)倉庫、數(shù)據(jù)平臺的用途:全部整合公司所
高級數(shù)據(jù)庫,數(shù)據(jù)倉庫有哪些關(guān)鍵技術(shù)?
總是想收拾好看看這塊內(nèi)容,呢既然是漫談,就想起了什么說什么吧。我始終是在互聯(lián)網(wǎng)行業(yè),就以互聯(lián)網(wǎng)行業(yè)來說。先大概列下互聯(lián)網(wǎng)行業(yè)數(shù)據(jù)倉庫、數(shù)據(jù)平臺的用途:
全部整合公司所有業(yè)務(wù)數(shù)據(jù),確立統(tǒng)一的數(shù)據(jù)中心;
能提供各種報表,有給高層的,有給各個業(yè)務(wù)的;
為網(wǎng)站運營提供運營上的數(shù)據(jù)支持,應(yīng)該是通過數(shù)據(jù),讓運營馬上知道一點網(wǎng)站和產(chǎn)品的運營效果;
為各個業(yè)務(wù)提供給線上或線下的數(shù)據(jù)支持,擁有公司統(tǒng)一的數(shù)據(jù)交換與能提供平臺;
總結(jié)用戶行為數(shù)據(jù),按照數(shù)據(jù)挖掘來降底投入成本,增加動員效果;例如廣告定向精準定向、用戶個性化推薦等;
開發(fā)數(shù)據(jù)產(chǎn)品,直接間接為公司能盈利;
建設(shè)開放數(shù)據(jù)平臺,新區(qū)公司數(shù)據(jù);
。。。。。。
上面列出來的內(nèi)容外表看來和傳統(tǒng)行業(yè)數(shù)據(jù)倉庫用途差不多,因此都沒有要求數(shù)據(jù)倉庫/數(shù)據(jù)平臺有很好的穩(wěn)定性、可靠性;但在互聯(lián)網(wǎng)行業(yè),以外數(shù)據(jù)量大之外,越來越多的業(yè)務(wù)具體的要求時效性,哪怕很多是要求動態(tài)實時的,同時,互聯(lián)網(wǎng)行業(yè)的業(yè)務(wù)變化的很快,不可能像傳統(tǒng)行業(yè)完全不一樣,可以不使用自頂向外的方法建立數(shù)據(jù)倉庫,一勞永逸,它那些要求新的業(yè)務(wù)迅速能融入其中數(shù)據(jù)倉庫中來,老的下線的業(yè)務(wù),能很方便的從超過的數(shù)據(jù)倉庫中刪號;
其實,互聯(lián)網(wǎng)行業(yè)的數(shù)據(jù)倉庫應(yīng)該是所謂的的敏捷數(shù)據(jù)倉庫,反而沒有要求能迅速的響應(yīng)數(shù)據(jù),也要求能飛快的響應(yīng)業(yè)務(wù);
建成敏捷屬性數(shù)據(jù)倉庫,除了對架構(gòu)技術(shù)上的要求之外,另外一個很有用的方面,是數(shù)據(jù)建模,假如一進來就盤算建立一套能兼容性問題所有數(shù)據(jù)和業(yè)務(wù)的數(shù)據(jù)模型,就得又回到自己傳統(tǒng)數(shù)據(jù)倉庫的建設(shè)上了,會很難不滿足對業(yè)務(wù)變化的快速響應(yīng)。應(yīng)對狀況,一般是先將核心的持久度化的業(yè)務(wù)并且深度建模(比如說:設(shè)計和實現(xiàn)網(wǎng)站日志成立的網(wǎng)站統(tǒng)計分析模型和用戶網(wǎng)頁軌跡模型;基于公司核心用戶數(shù)據(jù)確立的用戶模型),其它的業(yè)務(wù)象都采用維度寬表的來組建數(shù)據(jù)模型。這塊是后話。
整體架構(gòu)下面的圖是我們目前使用的數(shù)據(jù)平臺架構(gòu)圖,當(dāng)然大多公司肯定都差不多吧:
邏輯上,好象都有數(shù)據(jù)采集層、數(shù)據(jù)存儲與分析層、數(shù)據(jù)共享層、數(shù)據(jù)應(yīng)用層。很可能叫法有所不同,本質(zhì)上的角色都我不是很清楚。
我們往外看:
數(shù)據(jù)采集數(shù)據(jù)采集層的任務(wù)應(yīng)該是把數(shù)據(jù)從各種數(shù)據(jù)源中喂養(yǎng)靈獸和儲存到數(shù)據(jù)存儲上,期間有可能會做一些簡單的刷洗。
數(shù)據(jù)源的種類比較比較多:
網(wǎng)站日志:
作為互聯(lián)網(wǎng)行業(yè),網(wǎng)站日志占的份額最大,網(wǎng)站日志儲存在多臺網(wǎng)站日志服務(wù)器上,
像是是在每臺網(wǎng)站日志服務(wù)器上作戰(zhàn)部署flumeagent,實時的收集網(wǎng)站日志并存儲文件到HDFS上;
業(yè)務(wù)數(shù)據(jù)庫:
業(yè)務(wù)數(shù)據(jù)庫的種類又是類型眾多,有Mysql、Oracle、SqlServer等,這時候,我們不安的需要有一種能從各種數(shù)據(jù)庫中將同步數(shù)據(jù)到HDFS上的工具,Sqoop是一種,不過Sqoop太過瑣碎的工作,而且反正數(shù)據(jù)量大小,都是需要正常啟動MapReduce來想執(zhí)行,但是不需要Hadoop集群的每臺機器都能訪問業(yè)務(wù)數(shù)據(jù)庫;防范此場景,淘寶開源的DataX,是另一個很好的解決方案(可參考文章《異構(gòu)數(shù)據(jù)源海量數(shù)據(jù)交換工具-Taobao DataX 下載和使用》),有資源的話,這個可以設(shè)計和實現(xiàn)DataX之上做二次開發(fā),就能非常好的解決,我們目前建議使用的DataHub都是。
當(dāng)然了,F(xiàn)lume實際配置與開發(fā),也這個可以實時地的從數(shù)據(jù)庫中離線數(shù)據(jù)到HDFS
不知從何而來于Ftp/Http的數(shù)據(jù)源:
有可能一些合作伙伴可以提供的數(shù)據(jù),不需要/Http等有定時獲取,DataX也是可以不滿足該需求
其他數(shù)據(jù)源:
例如一些手工錄入的數(shù)據(jù),只需要需要提供一個接口或小程序,即可能完成
數(shù)據(jù)存儲與分析不用質(zhì)疑,HDFS是大數(shù)據(jù)環(huán)境下數(shù)據(jù)倉庫/數(shù)據(jù)平臺最完美的藝術(shù)品數(shù)據(jù)存儲解決方案。
不聯(lián)網(wǎng)數(shù)據(jù)分析與計算,也就是對實時性要求不高的部分,在我很顯然,Hive肯定受到波及的選擇,豐富的數(shù)據(jù)類型、內(nèi)置函數(shù);壓縮比相當(dāng)高的ORC文件存儲格式;非常方便的SQL支持,使得Hive在實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)上的統(tǒng)計分析比起比MapReduce要高效率的多,一句SQL這個可以完成的需求,的新MR很可能要上百行代碼;
當(dāng)然了,可以使用Hadoop框架慢慢的也需要提供了MapReduce接口,如果是真的很領(lǐng)情變更土地性質(zhì)Java,也可以對SQL不熟,這樣也這個可以不使用MapReduce來做分析與計算;Spark是這兩年的很火的,經(jīng)過實踐,它的性能并不比MapReduce好些很多,不過和Hive、Yarn結(jié)合的越來越好,而,必須意見在用Spark和SparkSQL來做分析和計算。只不過巳經(jīng)有HadoopYarn,在用Spark當(dāng)然是相當(dāng)太容易的,不需要另外重新部署Spark集群,關(guān)於Spark On Yarn的相關(guān)文章,可可以參考:《Spark On Yarn系列文章》
實時計算部分,后面另說。
數(shù)據(jù)共享這里的數(shù)據(jù)共享,其實指的是前面數(shù)據(jù)分析與計算后的結(jié)果存放的地方,其實那是關(guān)系型數(shù)據(jù)庫和NOSQL數(shù)據(jù)庫;
前面不使用Hive、MR、Spark、SparkSQL分析和計算的結(jié)果,還是在HDFS上,但大多數(shù)業(yè)務(wù)和應(yīng)用不可能真接從HDFS上資源數(shù)據(jù),這樣就要一個數(shù)據(jù)共享的地方,使得各業(yè)務(wù)和產(chǎn)品能比較方便的某些數(shù)據(jù);和數(shù)據(jù)采集層到HDFS只只不過,這里必須一個從HDFS將自動同步至其他目標數(shù)據(jù)源的工具,則是,DataX也也可以滿足的條件。
另外,一些實時計算的結(jié)果數(shù)據(jù)可能會由實時計算模塊然后讀取數(shù)據(jù)共享。
數(shù)據(jù)應(yīng)用
業(yè)務(wù)產(chǎn)品
業(yè)務(wù)產(chǎn)品所可以使用的數(shù)據(jù),已經(jīng)必然于數(shù)據(jù)共享層,他們再從數(shù)據(jù)共享層訪問即可;
報表
同業(yè)務(wù)產(chǎn)品,報表所可以使用的數(shù)據(jù),象確實是早就統(tǒng)計匯總好的,貯存于數(shù)據(jù)共享層;
即席查詢
即席去查詢的用戶有很多,有可能是數(shù)據(jù)開發(fā)人員、網(wǎng)站和產(chǎn)品運營人員、數(shù)據(jù)分析人員、哪怕是部門老大,他們應(yīng)該有即席查詢數(shù)據(jù)的需求;
這種即席網(wǎng)站查詢大多數(shù)是2個裝甲旅的報表和數(shù)據(jù)共享層的數(shù)據(jù)并又不能滿足的條件他們的需求,必須從數(shù)據(jù)存儲層然后網(wǎng)上查詢。
即席查詢好象是能完成,大的的難度只是相對而言響應(yīng)速度上,可以使用Hive有點慢,目前我的解決方案是SparkSQL,它的響應(yīng)速度較Hive快很多,并且能很不錯的與Hive兼容性。
其實,你也這個可以可以使用Impala,假如不在乎平臺中再多一個框架的話。
OLAP
目前,很多的OLAP工具沒法很好的支持從HDFS上再獲取數(shù)據(jù),也是按照將需要的數(shù)據(jù)同步到關(guān)系型數(shù)據(jù)庫中做OLAP,但假如數(shù)據(jù)量巨大無比的話,關(guān)系型數(shù)據(jù)庫很顯然不行;
這時候,不需要做或者的開發(fā),從HDFS的或HBase中某些數(shù)據(jù),成功OLAP的功能;
例如:依據(jù)什么用戶在界面選的不定的維度和指標,按照開發(fā)接口,從HBase中聲望兌換數(shù)據(jù)來影像展示。
其它數(shù)據(jù)接口
這種接口有通用的,有訂制的。比如:一個從Redis中獲取用戶屬性的接口是通用的,所有的業(yè)務(wù)都可以不內(nèi)部函數(shù)這個接口來資源用戶屬性。
實時計算現(xiàn)在業(yè)務(wù)對數(shù)據(jù)倉庫實時性的需求逐漸,例如:實時動態(tài)的了解網(wǎng)站的整個結(jié)構(gòu)流量;實時自動的獲取一個廣告的曝光和點擊;在海量數(shù)據(jù)下,憑借悠久的傳統(tǒng)數(shù)據(jù)庫和傳統(tǒng)實現(xiàn)方法方法基本是完成不了,不需要的是一種分布式的、高吞吐量的、顯示延時低的、高可靠的實時計算框架;Storm在這塊是也很能成熟了,但我你選擇SparkStreaming,原因很簡單,并不想多引入一個框架到平臺中,另,SparkStreaming比Storm連接時間性高那你一點點,那是對我們的需要可以不看出。
我們目前不使用SparkStreaming實現(xiàn)方法了動態(tài)實時的網(wǎng)站流量統(tǒng)計、實時自動的廣告效果統(tǒng)計兩塊兒功能。
做法也很很簡單,由Flume在前端日志服務(wù)器上積攢網(wǎng)站日志和廣告日志,實時地的郵箱里給SparkStreaming,由SparkStreaming能夠完成統(tǒng)計,將數(shù)據(jù)存儲至Redis,業(yè)務(wù)是從ftp訪問Redis實時地聲望兌換。
任務(wù)調(diào)度與監(jiān)控在數(shù)據(jù)倉庫/數(shù)據(jù)平臺中,有各式各樣的很多的程序和任務(wù),例如:數(shù)據(jù)采集任務(wù)、數(shù)據(jù)同步任務(wù)、數(shù)據(jù)分析任務(wù)等;
這些任務(wù)以外按時調(diào)度,還存在太緊張的任務(wù)感情依賴關(guān)系,諸如:數(shù)據(jù)分析任務(wù)前提是等相應(yīng)的數(shù)據(jù)采集任務(wù)完成后才能又開始;同步數(shù)據(jù)任務(wù)需要等數(shù)據(jù)分析任務(wù)內(nèi)容后才能結(jié)束;這就不需要一個更加完備的任務(wù)調(diào)度與監(jiān)控系統(tǒng),它以及數(shù)據(jù)倉庫/數(shù)據(jù)平臺的中樞,全權(quán)負責(zé)調(diào)度和監(jiān)控所有任務(wù)的分配與運行。
前面有寫過文章,《大數(shù)據(jù)平臺中的任務(wù)調(diào)度與監(jiān)控》,這里并沒有累贅。
系統(tǒng)的總結(jié)在我看樣子架構(gòu)并不是技術(shù)就會越新越好,完全是在也可以滿足自身需求的情況下,越簡單點越穩(wěn)定點越好。目前在我們的數(shù)據(jù)平臺中,開發(fā)更大的是參與業(yè)務(wù),而不是技術(shù),他們把業(yè)務(wù)和需求搞清楚了,基本都只不需要做簡單點SQL開發(fā),接著配置到調(diào)度系統(tǒng)就可以了,如果不是任務(wù)十分,會收到告警。這樣,這個可以使更多的資源執(zhí)著于業(yè)務(wù)之上。
Java常用,的數(shù)據(jù)庫有哪些?
Java可利用與絕大多數(shù)高端數(shù)據(jù)庫的連接與操作。
日常企業(yè)開發(fā)以使用開源數(shù)據(jù)庫極少部分。
1)、MySQL數(shù)據(jù)庫是目前在用最廣泛最好的在線開源數(shù)據(jù)庫
2)、MariaDB數(shù)據(jù)庫是MySQL的一個分支,盡量與MySQL的相同高度兼容性,確保全具備庫二進制奇偶校驗的然后替換功能,包括與MySQLAPI和命令的精確匹配,并從MySQL遷移
3)、PostgreSQL數(shù)據(jù)庫常規(guī)的是也很經(jīng)典的C/S(client/server)結(jié)構(gòu),也就是一個客戶端對應(yīng)一個服務(wù)器端守衛(wèi)進程的模式。PostgreSQL強大太完美的驅(qū)動,并允許標準的ANSI-SQL和擴充卡功能
其他另外高不收費性產(chǎn)品如Oracle、SQLServer。