常見的關系型數(shù)據(jù)庫管理系統(tǒng)產品有Oracle、SQL Server、Sybase、DB2、Access等。 1.Oracle

在公安等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設計、外貿營銷網(wǎng)站建設 網(wǎng)站設計制作按需求定制網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,成都營銷網(wǎng)站建設,成都外貿網(wǎng)站建設公司,公安網(wǎng)站建設費用合理。
Oracle是1983年推出的世界上第一個開放式商品化關系型數(shù)據(jù)庫管理系統(tǒng)。它采用標準的SQL結構化查詢語言,支持多種數(shù)據(jù)類型,提供面向對象存儲的數(shù)據(jù)支持,具有第四代語言開發(fā)工具,支持Unix、Windows NT、OS/2、Novell等多種平臺。除此之外,它還具有很好的并行處理功能。Oracle產品主要由Oracle服務器產品、Oracle開發(fā)工具、Oracle應用軟件組成,也有基于微機的數(shù)據(jù)庫產品。主要滿足對銀行、金融、保險等企業(yè)、事業(yè)開發(fā)大型數(shù)據(jù)庫的需求。
2.SQL Server
SQL即結構化查詢語言(Structured Query Language,簡稱為SQL)。SQL Server最早出現(xiàn)在1988年,當時只能在OS/2操作系統(tǒng)上運行。2000年12月微軟發(fā)布了SQL Server 2000,該軟件可以運行于Windows NT/2000/XP等多種操作系統(tǒng)之上,是支持客戶機/服務器結構的數(shù)據(jù)庫管理系統(tǒng),它可以幫助各種規(guī)模的企業(yè)管理數(shù)據(jù)。
隨著用戶群的不斷增大,SQL Server在易用性、可靠性、可收縮性、支持數(shù)據(jù)倉庫、系統(tǒng)集成等方面日趨完美。特別是SQL Server的數(shù)據(jù)庫搜索引擎,可以在絕大多數(shù)的操作系統(tǒng)之上運行,并針對海量數(shù)據(jù)的查詢進行了優(yōu)化。目前SQL Server已經成為應用最廣泛的數(shù)據(jù)庫產品之一。
由于使用SQL Server不但要掌握SQL Server的操作,而且還要能熟練掌握Windows NT/2000 Server的運行機制,以及SQL語言,所以對非專業(yè)人員的學習和使用有一定的難度。
3.Sybase
1987年推出的大型關系型數(shù)據(jù)庫管理系統(tǒng)Sybase,能運行于OS/2、Unix、Windows NT等多種平臺,它支持標準的關系型數(shù)據(jù)庫語言SQL,使用客戶機/服務器模式,采用開放體系結構,能實現(xiàn)網(wǎng)絡環(huán)境下各節(jié)點上服務器的數(shù)據(jù)庫互訪操作。技術先進、性能優(yōu)良,是開發(fā)大中型數(shù)據(jù)庫的工具。Sybase產品主要由服務器產品Sybase SQL Server、客戶產品Sybase SQL Toolset和接口軟件Sybase Client/Server Interface組成,還有著名的數(shù)據(jù)庫應用開發(fā)工具PowerBuilder。
4.DB2
DB2是基于SQL的關系型數(shù)據(jù)庫產品。20世紀80年代初期DB2的重點放在大型的主機平臺上。到90年代初,DB2發(fā)展到中型機、小型機以及微機平臺。DB2適用于各種硬件與軟件平臺。各種平臺上的DB2有共同的應用程序接口,運行在一種平臺上的程序可以很容易地移植到其他平臺。DB2的用戶主要分布在金融、商業(yè)、鐵路、航空、醫(yī)院、旅游等各個領域,以金融系統(tǒng)的應用最為突出。
5.Access
Access是在Windows操作系統(tǒng)下工作的關系型數(shù)據(jù)庫管理系統(tǒng)。它采用了Windows程序設計理念,以Windows特有的技術設計查詢、用戶界面、報表等數(shù)據(jù)對象,內嵌了VBA(全稱為Visual Basic Application)程序設計語言,具有集成的開發(fā)環(huán)境。Access提供圖形化的查詢工具和屏幕、報表生成器,用戶建立復雜的報表、界面無需編程和了解SQL語言,它會自動生成SQL代碼。
Access被集成到Office中,具有Office系列軟件的一般特點,如菜單、工具欄等。與其他數(shù)據(jù)庫管理系統(tǒng)軟件相比,更加簡單易學,一個普通的計算機用戶,沒有程序語言基礎,仍然可以快速地掌握和使用它。最重要的一點是,Access的功能比較強大,足以應付一般的數(shù)據(jù)管理及處理需要,適用于中小型企業(yè)數(shù)據(jù)管理的需求。當然,在數(shù)據(jù)定義、數(shù)據(jù)安全可靠、數(shù)據(jù)有效控制等方面,它比前面幾種數(shù)據(jù)庫產品要遜色不少。
NoSQL,指的是非關系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的
SNS類型的web2.0純動態(tài)網(wǎng)站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
NoSQL(NoSQL
= Not Only SQL
),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關系型的數(shù)
據(jù)存儲,相對于鋪天蓋地的關系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。
從這一新興技術中選擇一款正確的NoSQL數(shù)據(jù)庫是非常具有挑戰(zhàn)性的。比一下網(wǎng)建議在選擇時考慮以下因素:
并發(fā)控制
并
發(fā)控制指的是當多個用戶同時更新運行時,用于保護數(shù)據(jù)庫完整性的各種技術。并發(fā)機制不正確可能導致臟讀、幻讀和不可重復讀等此類問題。并發(fā)控制的目的是保
證一個用戶的工作不會對另一個用戶的工作產生不合理的影響。在某些情況下,這些措施保證了當用戶和其他用戶一起操作時,所得的結果和她單獨操作時的結果是
一樣的。在另一些情況下,這表示用戶的工作按預定的方式受其他用戶的影響。
封鎖
就是事務T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務T就對該數(shù)據(jù)對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數(shù)據(jù)對象。
封鎖是一次只允許一個用戶讀取或修改的一種機制,是實現(xiàn)并發(fā)控制的一個非常重要的技術。
MVCC
Multi-Version Concurrency Control多版本并發(fā)控制,維持一個數(shù)據(jù)的多個版本使讀寫操作沒有沖突。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關閉服務器就直接進行熱備份。
ACID
指
數(shù)據(jù)庫事務正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久
性(Durability)。一個支持事務(Transaction)的數(shù)據(jù)庫系統(tǒng),必需要具有這四種特性,否則在事務過程(Transaction
processing)當中無法保證數(shù)據(jù)的正確性,交易過程極可能達不到交易方的要求。
None
一些系統(tǒng)不提供原子性。
鏡像
數(shù)據(jù)庫鏡像是DBMS根據(jù)DBA的要求,自動把整個數(shù)據(jù)庫或其中的關鍵數(shù)據(jù)復制到另一個磁盤上,每當主數(shù)據(jù)庫更新時,DBMS會自動把更新后的數(shù)據(jù)復制過去,即DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
鏡像分為同步和異步。
數(shù)據(jù)存儲
指的是數(shù)據(jù)的物理特性怎樣被存儲在數(shù)據(jù)庫中。
磁盤 數(shù)據(jù)被存儲在硬盤驅動器里;
GFS或谷歌文件系統(tǒng)是一個由谷歌開發(fā)的專有的分布式文件系統(tǒng);
Hadoop是Apache軟件框架,免費許可下支持數(shù)據(jù)密集型分布式應用程序;
RAM隨機存儲器;
插件 可以添加外部插件;
Amazon S3通過Web服務接口提供存儲;
BDB:BDB
全稱是 “Berkeley DB”,它是MySQL具有事務能力的表類型,由Sleepycat
Software開發(fā)。BDB表類型提供了MySQL用戶長久期盼的功能,即事務控制能力。在任何RDBMS中,事務控制能力都是一種極其重要和寶貴的功
能。事務控制能力使得我們能夠確保一組命令確實已經全部執(zhí)行成功,或者確保當任何一個命令出現(xiàn)錯誤時所有命令的執(zhí)行結果均被退回。
實現(xiàn)語言
實現(xiàn)語言會影響數(shù)據(jù)庫的發(fā)展速度。典型的NoSQL數(shù)據(jù)庫是用低級語言如C / C + +編寫的。另一方面,那些更高層次的語言如Java,使自定義更容易。
實現(xiàn)語言有:C, C++, Erlang, Java, Python
特性
考慮下列哪一個特點對你的數(shù)據(jù)庫是最重要的:
持久性
可用性
一致性
分區(qū)容忍性
證書類型
下面這些許可證是一個不同的開放源碼許可的形式:
GPL:通用公共許可證
BSD:伯克利軟件分發(fā)
MPL:Mozilla公共許可證
EPL:Eclipse公共許可證
IDPL:最初的開發(fā)者的公共許可證
LGPL:較寬松通用公共許可證
存儲類型
存儲類型是NoSQL數(shù)據(jù)庫最大的不同,是決定使用哪款數(shù)據(jù)庫的一個首要指標。
關鍵字:支持get、put和刪除操作
按列存儲:相對于傳統(tǒng)的按行存儲,數(shù)據(jù)集成容易多了
面向文件系統(tǒng):存儲像是JSON或XML這樣的結構化文件,很容易就能從面向對象軟件中獲取數(shù)據(jù)。
大數(shù)據(jù)的由來
對于“大數(shù)據(jù)”(Big data)研究機構Gartner給出了這樣的定義。“大數(shù)據(jù)”是需要新處理模式才能具有更強的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力來適應海量、高增長率和多樣化的信息資產。
1
麥肯錫全球研究所給出的定義是:一種規(guī)模大到在獲取、存儲、管理、分析方面大大超出了傳統(tǒng)數(shù)據(jù)庫軟件工具能力范圍的數(shù)據(jù)集合,具有海量的數(shù)據(jù)規(guī)模、快速的數(shù)據(jù)流轉、多樣的數(shù)據(jù)類型和價值密度低四大特征。
大數(shù)據(jù)技術的戰(zhàn)略意義不在于掌握龐大的數(shù)據(jù)信息,而在于對這些含有意義的數(shù)據(jù)進行專業(yè)化處理。換而言之,如果把大數(shù)據(jù)比作一種產業(yè),那么這種產業(yè)實現(xiàn)盈利的關鍵,在于提高對數(shù)據(jù)的“加工能力”,通過“加工”實現(xiàn)數(shù)據(jù)的“增值”。
從技術上看,大數(shù)據(jù)與云計算的關系就像一枚硬幣的正反面一樣密不可分。大數(shù)據(jù)必然無法用單臺的計算機進行處理,必須采用分布式架構。它的特色在于對海量數(shù)據(jù)進行分布式數(shù)據(jù)挖掘。但它必須依托云計算的分布式處理、分布式數(shù)據(jù)庫和云存儲、虛擬化技術。
大數(shù)據(jù)需要特殊的技術,以有效地處理大量的容忍經過時間內的數(shù)據(jù)。適用于大數(shù)據(jù)的技術,包括大規(guī)模并行處理(MPP)數(shù)據(jù)庫、數(shù)據(jù)挖掘、分布式文件系統(tǒng)、分布式數(shù)據(jù)庫、云計算平臺、互聯(lián)網(wǎng)和可擴展的存儲系統(tǒng)。
最小的基本單位是bit,按順序給出所有單位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
大數(shù)據(jù)的應用領域
大數(shù)據(jù)無處不在,大數(shù)據(jù)應用于各個行業(yè),包括金融、 汽車 、餐飲、電信、能源、體能和 娛樂 等在內的 社會 各行各業(yè)都已經融入了大數(shù)據(jù)的印跡。
制造業(yè),利用工業(yè)大數(shù)據(jù)提升制造業(yè)水平,包括產品故障診斷與預測、分析工藝流程、改進生產工藝,優(yōu)化生產過程能耗、工業(yè)供應鏈分析與優(yōu)化、生產計劃與排程。
金融行業(yè),大數(shù)據(jù)在高頻交易、社交情緒分析和信貸風險分析三大金融創(chuàng)新領域發(fā)揮重大作用。
汽車 行業(yè),利用大數(shù)據(jù)和物聯(lián)網(wǎng)技術的無人駕駛 汽車 ,在不遠的未來將走入我們的日常生活。
互聯(lián)網(wǎng)行業(yè),借助于大數(shù)據(jù)技術,可以分析客戶行為,進行商品推薦和針對性廣告投放。
電信行業(yè),利用大數(shù)據(jù)技術實現(xiàn)客戶離網(wǎng)分析,及時掌握客戶離網(wǎng)傾向,出臺客戶挽留措施。
能源行業(yè),隨著智能電網(wǎng)的發(fā)展,電力公司可以掌握海量的用戶用電信息,利用大數(shù)據(jù)技術分析用戶用電模式,可以改進電網(wǎng)運行,合理設計電力需求響應系統(tǒng),確保電網(wǎng)運行安全。
物流行業(yè),利用大數(shù)據(jù)優(yōu)化物流網(wǎng)絡,提高物流效率,降低物流成本。
城市管理,可以利用大數(shù)據(jù)實現(xiàn)智能交通、環(huán)保監(jiān)測、城市規(guī)劃和智能安防。
體育 娛樂 ,大數(shù)據(jù)可以幫助我們訓練球隊,決定投拍哪種 題財?shù)?影視作品,以及預測比賽結果。
安全領域,政府可以利用大數(shù)據(jù)技術構建起強大的國家安全保障體系,企業(yè)可以利用大數(shù)據(jù)抵御網(wǎng)絡攻擊,警察可以借助大數(shù)據(jù)來預防犯罪。
個人生活, 大數(shù)據(jù)還可以應用于個人生活,利用與每個人相關聯(lián)的“個人大數(shù)據(jù)”,分析個人生活行為習慣,為其提供更加周到的個性化服務。
大數(shù)據(jù)的價值,遠遠不止于此,大數(shù)據(jù)對各行各業(yè)的滲透,大大推動了 社會 生產和生活,未來必將產生重大而深遠的影響。
大數(shù)據(jù)方面核心技術有哪些?
大數(shù)據(jù)技術的體系龐大且復雜,基礎的技術包含數(shù)據(jù)的采集、數(shù)據(jù)預處理、分布式存儲、NoSQL數(shù)據(jù)庫、數(shù)據(jù)倉庫、機器學習、并行計算、可視化等各種技術范疇和不同的技術層面。首先給出一個通用化的大數(shù)據(jù)處理框架,主要分為下面幾個方面:數(shù)據(jù)采集與預處理、數(shù)據(jù)存儲、數(shù)據(jù)清洗、數(shù)據(jù)查詢分析和數(shù)據(jù)可視化。
數(shù)據(jù)采集與預處理
對于各種來源的數(shù)據(jù),包括移動互聯(lián)網(wǎng)數(shù)據(jù)、社交網(wǎng)絡的數(shù)據(jù)等,這些結構化和非結構化的海量數(shù)據(jù)是零散的,也就是所謂的數(shù)據(jù)孤島,此時的這些數(shù)據(jù)并沒有什么意義,數(shù)據(jù)采集就是將這些數(shù)據(jù)寫入數(shù)據(jù)倉庫中,把零散的數(shù)據(jù)整合在一起,對這些數(shù)據(jù)綜合起來進行分析。數(shù)據(jù)采集包括文件日志的采集、數(shù)據(jù)庫日志的采集、關系型數(shù)據(jù)庫的接入和應用程序的接入等。在數(shù)據(jù)量比較小的時候,可以寫個定時的腳本將日志寫入存儲系統(tǒng),但隨著數(shù)據(jù)量的增長,這些方法無法提供數(shù)據(jù)安全保障,并且運維困難,需要更強壯的解決方案。
Flume NG
Flume NG作為實時日志收集系統(tǒng),支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù),同時,對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source用來消費(收集)數(shù)據(jù)源到channel組件中,channel作為中間臨時存儲,保存所有source的組件信息,sink從channel中讀取數(shù)據(jù),讀取成功之后會刪除channel中的信息。
NDC
Logstash
Logstash是開源的服務器端數(shù)據(jù)處理管道,能夠同時從多個來源采集數(shù)據(jù)、轉換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到您最喜歡的 “存儲庫” 中。一般常用的存儲庫是Elasticsearch。Logstash 支持各種輸入選擇,可以在同一時間從眾多常用的數(shù)據(jù)來源捕捉事件,能夠以連續(xù)的流式傳輸方式,輕松地從您的日志、指標、Web 應用、數(shù)據(jù)存儲以及各種 AWS 服務采集數(shù)據(jù)。
Sqoop
Sqoop,用來將關系型數(shù)據(jù)庫和Hadoop中的數(shù)據(jù)進行相互轉移的工具,可以將一個關系型數(shù)據(jù)庫(例如Mysql、Oracle)中的數(shù)據(jù)導入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數(shù)據(jù)導入到關系型數(shù)據(jù)庫(例如Mysql、Oracle)中。Sqoop 啟用了一個 MapReduce 作業(yè)(極其容錯的分布式并行計算)來執(zhí)行任務。Sqoop 的另一大優(yōu)勢是其傳輸大量結構化或半結構化數(shù)據(jù)的過程是完全自動化的。
流式計算
流式計算是行業(yè)研究的一個熱點,流式計算對多個高吞吐量的數(shù)據(jù)源進行實時的清洗、聚合和分析,可以對存在于社交網(wǎng)站、新聞等的數(shù)據(jù)信息流進行快速的處理并反饋,目前大數(shù)據(jù)流分析工具有很多,比如開源的strom,spark streaming等。
Strom集群結構是有一個主節(jié)點(nimbus)和多個工作節(jié)點(supervisor)組成的主從結構,主節(jié)點通過配置靜態(tài)指定或者在運行時動態(tài)選舉,nimbus與supervisor都是Storm提供的后臺守護進程,之間的通信是結合Zookeeper的狀態(tài)變更通知和監(jiān)控通知來處理。nimbus進程的主要職責是管理、協(xié)調和監(jiān)控集群上運行的topology(包括topology的發(fā)布、任務指派、事件處理時重新指派任務等)。supervisor進程等待nimbus分配任務后生成并監(jiān)控worker(jvm進程)執(zhí)行任務。supervisor與worker運行在不同的jvm上,如果由supervisor啟動的某個worker因為錯誤異常退出(或被kill掉),supervisor會嘗試重新生成新的worker進程。
Zookeeper
Zookeeper是一個分布式的,開放源碼的分布式應用程序協(xié)調服務,提供數(shù)據(jù)同步服務。它的作用主要有配置管理、名字服務、分布式鎖和集群管理。配置管理指的是在一個地方修改了配置,那么對這個地方的配置感興趣的所有的都可以獲得變更,省去了手動拷貝配置的繁瑣,還很好的保證了數(shù)據(jù)的可靠和一致性,同時它可以通過名字來獲取資源或者服務的地址等信息,可以監(jiān)控集群中機器的變化,實現(xiàn)了類似于心跳機制的功能。
數(shù)據(jù)存儲
Hadoop作為一個開源的框架,專為離線和大規(guī)模數(shù)據(jù)分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用于數(shù)據(jù)存儲。
HBase
HBase,是一個分布式的、面向列的開源數(shù)據(jù)庫,可以認為是hdfs的封裝,本質是數(shù)據(jù)存儲、NoSQL數(shù)據(jù)庫。HBase是一種Key/Value系統(tǒng),部署在hdfs上,克服了hdfs在隨機讀寫這個方面的缺點,與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。
Phoenix
Phoenix,相當于一個Java中間件,幫助開發(fā)工程師能夠像使用JDBC訪問關系型數(shù)據(jù)庫一樣訪問NoSQL數(shù)據(jù)庫HBase。
Yarn
Yarn是一種Hadoop資源管理器,可為上層應用提供統(tǒng)一的資源管理和調度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。Yarn由下面的幾大組件構成:一個全局的資源管理器ResourceManager、ResourceManager的每個節(jié)點代理NodeManager、表示每個應用的Application以及每一個ApplicationMaster擁有多個Container在NodeManager上運行。
Mesos
Mesos是一款開源的集群管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用架構。
Redis
Redis是一種速度非常快的非關系數(shù)據(jù)庫,可以存儲鍵與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數(shù)據(jù)持久化到硬盤中,使用復制特性來擴展性能,還可以使用客戶端分片來擴展寫性能。
Atlas
Atlas是一個位于應用程序與MySQL之間的中間件。在后端DB看來,Atlas相當于連接它的客戶端,在前端應用看來,Atlas相當于一個DB。Atlas作為服務端與應用程序通訊,它實現(xiàn)了MySQL的客戶端和服務端協(xié)議,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節(jié),同時為了降低MySQL負擔,它還維護了連接池。Atlas啟動后會創(chuàng)建多個線程,其中一個為主線程,其余為工作線程。主線程負責監(jiān)聽所有的客戶端連接請求,工作線程只監(jiān)聽主線程的命令請求。
Kudu
Kudu是圍繞Hadoop生態(tài)圈建立的存儲引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,它運行在普通的服務器上、可分布式規(guī)模化部署、并且滿足工業(yè)界的高可用要求。其設計理念為fast analytics on fast data。作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數(shù)據(jù)分析能力。Kudu不但提供了行級的插入、更新、刪除API,同時也提供了接近Parquet性能的批量掃描操作。使用同一份存儲,既可以進行隨機讀寫,也可以滿足數(shù)據(jù)分析的要求。Kudu的應用場景很廣泛,比如可以進行實時的數(shù)據(jù)分析,用于數(shù)據(jù)可能會存在變化的時序數(shù)據(jù)應用等。
在數(shù)據(jù)存儲過程中,涉及到的數(shù)據(jù)表都是成千上百列,包含各種復雜的Query,推薦使用列式存儲方法,比如parquent,ORC等對數(shù)據(jù)進行壓縮。Parquet 可以支持靈活的壓縮選項,顯著減少磁盤上的存儲。
數(shù)據(jù)清洗
MapReduce作為Hadoop的查詢引擎,用于大規(guī)模數(shù)據(jù)集的并行計算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統(tǒng)中。
隨著業(yè)務數(shù)據(jù)量的增多,需要進行訓練和清洗的數(shù)據(jù)會變得越來越復雜,這個時候就需要任務調度系統(tǒng),比如oozie或者azkaban,對關鍵任務進行調度和監(jiān)控。
Oozie
Oozie是用于Hadoop平臺的一種工作流調度引擎,提供了RESTful API接口來接受用戶的提交請求(提交工作流作業(yè)),當提交了workflow后,由工作流引擎負責workflow的執(zhí)行以及狀態(tài)的轉換。用戶在HDFS上部署好作業(yè)(MR作業(yè)),然后向Oozie提交Workflow,Oozie以異步方式將作業(yè)(MR作業(yè))提交給Hadoop。這也是為什么當調用Oozie 的RESTful接口提交作業(yè)之后能立即返回一個JobId的原因,用戶程序不必等待作業(yè)執(zhí)行完成(因為有些大作業(yè)可能會執(zhí)行很久(幾個小時甚至幾天))。Oozie在后臺以異步方式,再將workflow對應的Action提交給hadoop執(zhí)行。
Azkaban
Azkaban也是一種工作流的控制引擎,可以用來解決有多個hadoop或者spark等離線計算任務之間的依賴關系問題。azkaban主要是由三部分構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數(shù)的狀態(tài)信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執(zhí)行過程中的監(jiān)控等;Azkaban Executor Server用來調度工作流和任務,記錄工作流或者任務的日志。
流計算任務的處理平臺Sloth,是網(wǎng)易首個自研流計算平臺,旨在解決公司內各產品日益增長的流計算需求。作為一個計算服務平臺,其特點是易用、實時、可靠,為用戶節(jié)省技術方面(開發(fā)、運維)的投入,幫助用戶專注于解決產品本身的流計算需求
數(shù)據(jù)查詢分析
Hive
Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數(shù)據(jù)映射為一張數(shù)據(jù)庫表,并提供 HQL(Hive SQL)查詢功能。Hive本身不存儲和計算數(shù)據(jù),它完全依賴于HDFS和MapReduce。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapReduce jobs,然后在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapReduce程序的過程,它的出現(xiàn)可以讓那些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規(guī)模數(shù)據(jù)集上很方便地利用SQL 語言查詢、匯總、分析數(shù)據(jù)。
Hive是為大數(shù)據(jù)批量處理而生的,Hive的出現(xiàn)解決了傳統(tǒng)的關系型數(shù)據(jù)庫(MySql、Oracle)在大數(shù)據(jù)處理上的瓶頸 。Hive 將執(zhí)行計劃分成map-shuffle-reduce-map-shuffle-reduce…的模型。如果一個Query會被編譯成多輪MapReduce,則會有更多的寫中間結果。由于MapReduce執(zhí)行框架本身的特點,過多的中間過程會增加整個Query的執(zhí)行時間。在Hive的運行過程中,用戶只需要創(chuàng)建表,導入數(shù)據(jù),編寫SQL分析語句即可。剩下的過程由Hive框架自動的完成。
Impala
Impala是對Hive的一個補充,可以實現(xiàn)高效的SQL查詢。使用Impala來實現(xiàn)SQL on Hadoop,用來進行大數(shù)據(jù)實時查詢分析。通過熟悉的傳統(tǒng)關系型數(shù)據(jù)庫的SQL風格來操作大數(shù)據(jù),同時數(shù)據(jù)也是可以存儲到HDFS和HBase中的。Impala沒有再使用緩慢的Hive+MapReduce批處理,而是通過使用與商用并行關系數(shù)據(jù)庫中類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統(tǒng)計函數(shù)查詢數(shù)據(jù),從而大大降低了延遲。Impala將整個查詢分成一執(zhí)行計劃樹,而不是一連串的MapReduce任務,相比Hive沒了MapReduce啟動時間。
Hive 適合于長時間的批處理查詢分析,而Impala適合于實時交互式SQL查詢,Impala給數(shù)據(jù)人員提供了快速實驗,驗證想法的大數(shù)據(jù)分析工具,可以先使用Hive進行數(shù)據(jù)轉換處理,之后使用Impala在Hive處理好后的數(shù)據(jù)集上進行快速的數(shù)據(jù)分析。總的來說:Impala把執(zhí)行計劃表現(xiàn)為一棵完整的執(zhí)行計劃樹,可以更自然地分發(fā)執(zhí)行計劃到各個Impalad執(zhí)行查詢,而不用像Hive那樣把它組合成管道型的map-reduce模式,以此保證Impala有更好的并發(fā)性和避免不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問題有一定的限制。
Spark
Spark擁有Hadoop MapReduce所具有的特點,它將Job中間輸出結果保存在內存中,從而不需要讀取HDFS。Spark 啟用了內存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載。Spark 是在 Scala 語言中實現(xiàn)的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數(shù)據(jù)集。
Nutch
Nutch 是一個開源Java 實現(xiàn)的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。
Solr
Solr用Java編寫、運行在Servlet容器(如Apache Tomcat或Jetty)的一個獨立的企業(yè)級搜索應用的全文搜索服務器。它對外提供類似于Web-service的API接口,用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,并得到XML格式的返回結果。
Elasticsearch
Elasticsearch是一個開源的全文搜索引擎,基于Lucene的搜索服務器,可以快速的儲存、搜索和分析海量的數(shù)據(jù)。設計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。
還涉及到一些機器學習語言,比如,Mahout主要目標是創(chuàng)建一些可伸縮的機器學習算法,供開發(fā)人員在Apache的許可下免費使用;深度學習框架Caffe以及使用數(shù)據(jù)流圖進行數(shù)值計算的開源軟件庫TensorFlow等,常用的機器學習算法比如,貝葉斯、邏輯回歸、決策樹、神經網(wǎng)絡、協(xié)同過濾等。
數(shù)據(jù)可視化
對接一些BI平臺,將分析得到的數(shù)據(jù)進行可視化,用于指導決策服務。主流的BI平臺比如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網(wǎng)易有數(shù)等。
在上面的每一個階段,保障數(shù)據(jù)的安全是不可忽視的問題。
基于網(wǎng)絡身份認證的協(xié)議Kerberos,用來在非安全網(wǎng)絡中,對個人通信以安全的手段進行身份認證,它允許某實體在非安全網(wǎng)絡環(huán)境下通信,向另一個實體以一種安全的方式證明自己的身份。
控制權限的ranger是一個Hadoop集群權限框架,提供操作、監(jiān)控、管理復雜的數(shù)據(jù)權限,它提供一個集中的管理機制,管理基于yarn的Hadoop生態(tài)圈的所有數(shù)據(jù)權限。可以對Hadoop生態(tài)的組件如Hive,Hbase進行細粒度的數(shù)據(jù)訪問控制。通過操作Ranger控制臺,管理員可以輕松的通過配置策略來控制用戶訪問HDFS文件夾、HDFS文件、數(shù)據(jù)庫、表、字段權限。這些策略可以為不同的用戶和組來設置,同時權限可與hadoop無縫對接。
簡單說有三大核心技術:拿數(shù)據(jù),算數(shù)據(jù),賣數(shù)據(jù)。
對于變化頻率非常快的數(shù)據(jù)來說,如果還選擇傳統(tǒng)的靜態(tài)緩存方式(Memocached、FileSystem等)展示數(shù)據(jù),可能在緩存的存取上會有很大的開銷,并不能很好的滿足需要,而Redis這樣基于內存的NoSQL數(shù)據(jù)庫,就非常適合擔任實時數(shù)據(jù)的容器。但是往往又有數(shù)據(jù)可靠性的需求,采用MySQL作為數(shù)據(jù)存儲,不會因為內存問題而引起數(shù)據(jù)丟失,同時也可以利用關系數(shù)據(jù)庫的特性實現(xiàn)很多功能。所以就會很自然的想到是否可以采用MySQL作為數(shù)據(jù)存儲引擎,Redis則作為Cache。而這種需求目前還沒有看到有特別成熟的解決方案或工具,因此采用Gearman+PHP+MySQLUDF的組合異步實現(xiàn)MySQL到Redis的數(shù)據(jù)復制。MySQL到Redis數(shù)據(jù)復制方案無論MySQL還是Redis,自身都帶有數(shù)據(jù)同步的機制,比較常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog來實現(xiàn)的,這樣的數(shù)據(jù)復制其實還是一個異步過程,只不過當服務器都在同一內網(wǎng)時,異步的延遲幾乎可以忽略。那么理論上也可以用同樣方式,分析MySQL的binlog文件并將數(shù)據(jù)插入Redis。但是這需要對binlog文件以及MySQL有非常深入的理解,同時由于binlog存在Statement/Row/Mixedlevel多種形式,分析binlog實現(xiàn)同步的工作量是非常大的。因此這里選擇了一種開發(fā)成本更加低廉的方式,借用已經比較成熟的MySQLUDF,將MySQL數(shù)據(jù)首先放入Gearman中,然后通過一個自己編寫的PHPGearmanWorker,將數(shù)據(jù)同步到Redis。比分析binlog的方式增加了不少流程,但是實現(xiàn)成本更低,更容易操作。Gearman的安裝與使用Gearman是一個支持分布式的任務分發(fā)框架。設計簡潔,獲得了非常廣泛的支持。一個典型的Gearman應用包括以下這些部分:GearmanJobServer:Gearman核心程序,需要編譯安裝并以守護進程形式運行在后臺GearmanClient:可以理解為任務的收件員,比如在后臺執(zhí)行一個發(fā)送郵件的任務,可以在程序中調用一個GearmanClient并傳入郵件的信息,然后就可以將執(zhí)行結果立即展示給用戶,而任務本身會慢慢在后臺運行。GearmanWorker:任務的真正執(zhí)行者,一般需要自己編寫具體邏輯并通過守護進程方式運行,GearmanWorker接收到GearmanClient傳遞的任務內容后,會按順序處理。以前曾經介紹過類似的后臺任務處理項目Resque。兩者的設計其實非常接近,簡單可以類比為:GearmanJobServer:對應Resque的Redis部分GearmanClient:對應Resque的Queue操作GearmanWorker:對應Resque的Worker和Job這里之所以選擇Gearman而不是Resque是因為Gearman提供了比較好用的MySQLUDF,工作量更小。安裝Gearman及PHPGearman擴展以下均以Ubuntu12.04為例。apt-getinstallgearmangearman-serverlibgearman-dev檢查Gearman的運行狀況:/etc/init.d/gearman-job-serverstatus*gearmandisrunning說明Gearman已經安裝成功。PHP的Gearman擴展可以通過pecl直接安裝peclinstallgearmanecho"extension=gearman.so"/etc/php5/conf.d/gearman.iniservicephp5-fpmrestart但是實測發(fā)現(xiàn)ubuntu默認安裝的gearman版本過低,直接運行peclinstallgearman會報錯configure:error:libgearmanversion1.1.0orlaterrequired因此Gearman+PHP擴展建議通過編譯方式安裝,這里為了簡單說明,選擇安裝舊版本擴展:peclinstallgearman-1.0.3Gearman+PHP實例為了更容易理解后文Gearman的運行流程,這里不妨從一個最簡單的Gearman實例來說明,比如要進行一個文件處理的操作,首先編寫一個GearmanClient并命名為client.php:addServer();$client-doBackground('writeLog','Logcontent');echo'文件已經在后臺操作';運行這個文件,相當于模擬用戶請求一個Web頁面后,將處理結束的信息返回用戶:phpclient.php查看一下Gearman的狀況:(echostatus;sleep0.1)|netcat127.0.0.14730可以看到輸出為writeLog100.說明已經在Gearman中建立了一個名為writeLog的任務,并且有1個任務在隊列等待中。而上面的4列分別代表當前的Gearman的運行狀態(tài):任務名稱在等待隊列中的任務正在運行的任務正在運行的Worker進程可以使用watch進行實時監(jiān)控:watch-n1"(echostatus;sleep0.1)|nc127.0.0.14730"然后我們需要編寫一個GearmanWorker命名為worker.php:addServer();$worker-addFunction('writeLog','writeLog');while($worker-work());functionwriteLog($job){$log=$job-workload();file_put_contents(__DIR__.'/gearman.log',$log."\n",FILE_APPEND|LOCK_EX);}Worker使用一個while死循環(huán)實現(xiàn)守護進程,運行phpworker.php可以看到Gearman狀態(tài)變?yōu)椋簑riteLog001同時查看同目錄下gearman.log,內容應為從Client傳入的值Logcontent。通過MySQLUDF+Trigger同步數(shù)據(jù)到GearmanMySQL要實現(xiàn)與外部程序互通的最好方式還是通過MySQLUDF(MySQLuserdefinedfunctions)來實現(xiàn)。為了讓MySQL能將數(shù)據(jù)傳入Gearman,這里使用了lib_mysqludf_json和gearman-mysql-udf的組合。安裝lib_mysqludf_json使用lib_mysqludf_json的原因是因為Gearman只接受字符串作為入口參數(shù),可以通過lib_mysqludf_json將MySQL中的數(shù)據(jù)編碼為JSON字符串apt-getinstalllibmysqlclient-devwget/mysqludf/lib_mysqludf_json/archive/master.zipunzipmaster.zipcdlib_mysqludf_json-master/rmlib_mysqludf_json.sogcc$(mysql_config--cflags)-shared-fPIC-olib_mysqludf_json.solib_mysqludf_json.c可以看到重新編譯生成了lib_mysqludf_json.so文件,此時需要查看MySQL的插件安裝路徑:mysql-uroot-pPASSWORD--execute="showvariableslike'%plugin%';"+---------------+------------------------+|Variable_name|Value|+---------------+------------------------+|plugin_dir|/usr/lib/mysql/plugin/|+---------------+------------------------+然后將lib_mysqludf_json.so文件復制到對應位置:cplib_mysqludf_json.so/usr/lib/mysql/plugin/最后登入MySQL運行語句注冊UDF函數(shù):CREATEFUNCTIONjson_objectRETURNSSTRINGSONAME'lib_mysqludf_json.so';安裝gearman-mysql-udf方法幾乎一樣:apt-getinstalllibgearman-devwgetmakemakeinstall登入MySQL運行語句注冊UDF函數(shù):CREATEFUNCTIONgman_do_backgroundRETURNSSTRINGSONAME'libgearman_mysql_udf.so';CREATEFUNCTIONgman_servers_setRETURNSSTRINGSONAME'libgearman_mysql_udf.so';最后指定Gearman服務器的信息:SELECTgman_servers_set('127.0.0.1:4730');通過MySQL觸發(fā)器實現(xiàn)數(shù)據(jù)同步最終同步哪些數(shù)據(jù),同步的條件,還是需要根據(jù)實際情況決定,比如將數(shù)據(jù)表data的數(shù)據(jù)在每次更新時同步,那么編寫Trigger如下:DELIMITER$$CREATETRIGGERdatatoredisAFTERUPDATEONdataFOREACHROWBEGINSET@ret=gman_do_background('syncToRedis',json_object(NEW.idas`id`,NEW.volumeas`volume`));END$$DELIMITER;嘗試在數(shù)據(jù)庫中更新一條數(shù)據(jù)查看Gearman是否生效。GearmanPHPWorker將MySQL數(shù)據(jù)異步復制到RedisRedis作為時下當熱的NoSQL緩存解決方案無需過多介紹,其安裝及使用也非常簡單:apt-getinstallredis-serverpeclinstallredisecho"extension=redis.so"/etc/php5/conf.d/redis.ini然后編寫一個GearmanWorker:redis_worker.php#!/usr/bin/envphpaddServer();$worker-addFunction('syncToRedis','syncToRedis');$redis=newRedis();$redis-connect('127.0.0.1',6379);while($worker-work());functionsyncToRedis($job){global$redis;$workString=$job-workload();$work=json_decode($workString);if(!isset($work-id)){returnfalse;}$redis-set($work-id,$workString);}最后需要將Worker在后臺運行:nohupphpredis_worker.php通過這種方式將MySQL數(shù)據(jù)復制到Redis,經測試單Worker基本可以瞬時完成。
淘寶開源的TDDL和cobar的結合,放到了阿里云上就是DRDS,是商品,服務,可以購買使用的。可以在阿里云官網(wǎng)上注冊免費試用。
=====================================================
隨著互聯(lián)網(wǎng)時代的到來,計算機要管理的數(shù)據(jù)量呈指數(shù)級別地飛速上漲,而我們卻完全無法對用戶數(shù)做出準確預估。我們的系統(tǒng)所需要支持的用戶數(shù),很可能在短短的一個月內突然爆發(fā)式地增長幾千倍,數(shù)據(jù)也很可能快速地從原來的幾百GB飛速上漲到了幾百個TB。如果在這爆發(fā)的關鍵時刻,系統(tǒng)不穩(wěn)定或無法訪問,那么對于業(yè)務將會是毀滅性的打擊。
伴隨著這種對于系統(tǒng)性能、成本以及擴展性的新需要,以HBase、MongoDB為代表的NoSQL數(shù)據(jù)庫和以阿里DRDS、VoltDB、ScaleBase為代表的分布式NewSQL數(shù)據(jù)庫如雨后春筍般不斷涌現(xiàn)出來。
本文將會介紹阿里DRDS的技術理念、發(fā)展歷程、技術特性等內容。
DRDS設計理念
從20世紀70年代關系數(shù)據(jù)庫創(chuàng)立開始,其實大家在數(shù)據(jù)庫上的追求就從未發(fā)生過變化:更快的存取數(shù)據(jù),可以按需擴縮以承載更大的訪問量和更大的數(shù)據(jù)量,開發(fā)容易,硬件成本低,我們可以把這叫做數(shù)據(jù)庫領域的圣杯。
為了支撐更大的訪問量和數(shù)據(jù)量,我們必然需要分布式數(shù)據(jù)庫系統(tǒng),然而分布式系統(tǒng)又必然會面對強一致性所帶來的延遲提高的問題,因為網(wǎng)絡通信本身比單機內通信代價高很多,這種通信的代價就會直接增加系統(tǒng)單次提交的延遲。延遲提高會導致數(shù)據(jù)庫鎖持有時間變長,使得高沖突條件下分布式事務的性能不升反降(這個具體可以了解一下Amdahl定律),甚至性能距離單機數(shù)據(jù)庫都還有明顯的差距。
從上面的說明,我們可以發(fā)現(xiàn),問題的關鍵并不是分布式事務做不出來,而是做出來了卻因為性能太差而沒有什么卵用。數(shù)據(jù)庫領域的高手們努力了40年,但至今仍然沒有人能夠很好地解決這個問題,Google Spanner的開發(fā)負責人就經常在他的Blog上談論延遲的問題,相信也是飽受這個問題的困擾。
面對這個難題,傳統(tǒng)的關系數(shù)據(jù)庫選擇了放棄分布式的方案,因為在20世紀70~80年代,我們的數(shù)據(jù)庫主要被用來處理企業(yè)內的各類數(shù)據(jù),面對的用戶不過幾千人,而數(shù)據(jù)量最多也就是TB級別。用單臺機器來處理事務,用個磁盤陣列處理一下磁盤容量不夠的問題,基本上就能解決一切問題了。
然而,信息化和互聯(lián)網(wǎng)的浪潮改變了這一切,我們突然發(fā)現(xiàn),我們服務的對象發(fā)生了根本性變化,從原來的幾千人,變成了現(xiàn)在的幾億人,數(shù)據(jù)量也從TB級別到了PB級別甚至更多。存在單點的單機系統(tǒng)無論如何努力,都會面對系統(tǒng)處理能力的天花板。原來的這條路,看起來是走不下去了,我們必須想辦法換一條路來走。
可是,分布式數(shù)據(jù)庫所面對的強一致性難題卻像一座高山,人們努力了無數(shù)個日日夜夜,但能翻越這座山的日子看來仍然遙遙無期。
于是,有一群人認為,強一致性這件事看來不怎么靠譜,那徹底繞開這個問題是不是個更好的選擇?他們發(fā)現(xiàn)確實有那么一些場景是不需要強一致事務的,甚至連SQL都可以不要,最典型的就是日志流水的記錄與分析這類場景。而去掉了事務和SQL,接口簡單了,性能就更容易得到提升,擴展性也更容易實現(xiàn),這就是NoSQL系統(tǒng)的起源。
雖然NoSQL解決了性能和擴展性問題,但這種繞開問題的方法給用戶帶來了很多困擾,系統(tǒng)的開發(fā)成本也大大提升。這時候就有另外一群人,他們覺得用戶需要SQL,覺得用戶也需要事務,問題的關鍵在于我們要努力地往圣杯的方向不斷前進。在保持系統(tǒng)的擴展性和性能的前提下,付出盡可能小的代價來滿足業(yè)務對數(shù)據(jù)庫的需要。這就是NewSQL這個理念的由來。
DRDS也是一個NewSQL的系統(tǒng),它與ScaleBase、VoltDB等系統(tǒng)類似,都希望能夠找到一條既能保持系統(tǒng)的高擴展性和高性能,又能盡可能保持傳統(tǒng)數(shù)據(jù)庫的ACID事務和SQL特性的分布式數(shù)據(jù)庫系統(tǒng)。
DRDS發(fā)展歷程
在一開始,TDDL的主要功能就是做數(shù)據(jù)庫切分,一個或一組SQL請求提交到TDDL,TDDL進行規(guī)則運算后得知SQL應該被分發(fā)到哪個機器,直接將SQL轉發(fā)到對應機器即可(如圖1)。
圖1 TDDL數(shù)據(jù)庫切分
開始的時候,這種簡單的路由策略能夠滿足用戶的需要,我們開始的那些應用,就是通過這樣非常簡單的方式完成了他所有的應用請求。我們也認為,這種方案簡單可靠,已經足夠好用了。
然而,當我們服務的應用從十幾個增長到幾百個的時候,大量的中小應用加入,大家紛紛表示,原來的方案限制太大,很多應用其實只是希望做個讀寫分離,希望能有更好的SQL兼容性。
于是,我們做了第一次重大升級,在這次升級里,我們提出了一個重要的概念就是三層架構,Matrix對應數(shù)據(jù)庫切分場景,對SQL有一定限制,Group對應讀寫分離和高可用場景,對SQL幾乎沒有限制。如圖2所示。
圖2 數(shù)據(jù)庫升級為三層架構
這種做法立刻得到了大家的認可,TDDL所提供的讀寫分離、分庫分表等核心功能,也成為了阿里集團內數(shù)據(jù)庫領域的標配組件,在阿里的幾乎所有應用上都有應用。最為難得的是,這些功能從上線后,到現(xiàn)在已經經歷了多年雙11的嚴酷考驗,從未出現(xiàn)過嚴重故障(p0、p1級別故障屬于嚴重故障)。數(shù)據(jù)庫體系作為整個應用系統(tǒng)的重中之重,能做到這件事,真是非常不容易。
隨著核心功能的穩(wěn)定,自2010年開始,我們集中全部精力開始關注TDDL后端運維系統(tǒng)的完善與改進性工作。在DBA團隊的給力配合下,圍繞著TDDL,我們成功做到了在線數(shù)據(jù)動態(tài)擴縮、異步索引等關鍵特征,同時也比較成功地構建了一整套分布式數(shù)據(jù)庫服務管控體系,用戶基本上可以完全自助地完成整套數(shù)據(jù)庫環(huán)境的搭建與初始化工作。
大概是2012年,我們在阿里云團隊的支持下,開始嘗試將TDDL這套體系輸出到阿里云上,也有了個新的名字:阿里分布式數(shù)據(jù)庫服務(DRDS),希望能夠用我們的技術服務好更多的人。
不過當我們滿懷自信地把自己的軟件拿到云上的時候,卻發(fā)現(xiàn)我們的軟件距離用戶的要求差距很大。在內部因為有DBA的同學們幫助進行SQL review,所以SQL的復雜度都是可控的。然而到了云上,看了各種渠道提過來的兼容性需求,我們經常是不自覺地發(fā)出這樣的感嘆:“啊?原來這種語法MySQL也是可以支持的?”
于是,我們又進行了架構升級,這次是以兼容性為核心目標的系統(tǒng)升級工作,希望能夠在分布式場景下支持各類復雜的SQL,同時也將阿里這么多年來在分布式事務上的積累都帶到了DRDS里面。
這次架構升級,我們的投入史無前例,用了三年多才將整個系統(tǒng)落地完成。我們先在內部以我們自己的業(yè)務作為首批用戶上線,經過了內部幾百個應用的嚴酷考驗以后,我們才敢拿到云上,給到我們的最終用戶使用。
目前,我們正在將TDDL中更多的積累輸出到云上,同時也努力優(yōu)化我們的用戶界面。PS:其實用戶界面優(yōu)化對我們這種專注于高性能后端技術的團隊來說,才是最大的技術挑戰(zhàn),連我也去學了AngularJS,參與了用戶UI編。
DRDS主要功能介紹
發(fā)展歷史看完了,下面就由我來介紹一下目前我們已經輸出到云上的主要功能。
【分布式SQL執(zhí)行引擎】
分布式SQL引擎主要的目的,就是實現(xiàn)與單機數(shù)據(jù)庫SQL引擎的完全兼容。目前我們的SQL引擎能夠做到與MySQL的SQL引擎全兼容,包括各類join和各類復雜函數(shù)等。他主要包含SQL解析、優(yōu)化、執(zhí)行和合并四個流程,如圖3中綠色部分。
圖3 SQL引擎實現(xiàn)的主要流程
雖然SQL是兼容的,但是分布式SQL執(zhí)行算法與單機SQL的執(zhí)行算法卻完全不同,原因也很簡單,網(wǎng)絡通信的延遲比單機內通信的延遲大得多。舉個例子說明一下,我們有份文件要從一張紙A上謄寫到另外一張紙B上,單機系統(tǒng)就好比兩張紙都在同一個辦公室里,而分布式數(shù)據(jù)庫則就像是一張紙在北京,一張紙在杭州。
自然地,如果兩張紙在同一個辦公室,因為傳輸距離近,逐行謄寫的效率是可以接受的。而如果距離是北京到杭州,用逐行謄寫的方式,就立刻顯得代價太高了,我們總不能看一行,就打個“飛的”去杭州寫下來吧。在這種情況下,還是把紙A上的信息拍個照片,【一整批的】帶到杭州去處理,明顯更簡單一些。這就是分布式數(shù)據(jù)庫特別強調吞吐調優(yōu)的原因,只要是涉及到跨機的所有查詢,都必須盡可能的積攢一批后一起發(fā)送,以減少系統(tǒng)延遲提高帶來的不良影響。
【按需數(shù)據(jù)庫集群平滑擴縮】
DRDS允許應用按需將新的單機存儲加入或移出集群,DRDS則能夠保證應用在遷移流程中實現(xiàn)不停機擴容縮容。
圖4 DRDS按需進行平滑擴縮
在內部的數(shù)據(jù)庫使用實踐中,這個功能的一個最重要應用場景就是雙11了。在雙11之前,我們會將大批的機器加入到我們的數(shù)據(jù)庫集群中,抗過了雙11,這批機器就會下線。
當DRDS來到云上,我們發(fā)現(xiàn)雙11其實不僅僅只影響阿里內部的系統(tǒng)。在下游的各類電商輔助性系統(tǒng)其實也面對巨大壓力。在雙11前5天,網(wǎng)聚寶的熊總就找到我說,擔心撐不過雙11的流量,怕系統(tǒng)掛。于是我們就給他介紹了這個自動擴容的功能怎么用,他買了一個月的數(shù)據(jù)庫,掛接在DRDS上。數(shù)據(jù)庫能力立刻翻倍,輕松抗過了雙11,也算是我印象比較深刻的一個案例了。
因為我們完全無法預測在什么時間點系統(tǒng)會有爆發(fā)性的增長,而如果在這時候系統(tǒng)因為技術原因不能使用,就會給整個業(yè)務帶來毀滅性的影響,風口一旦錯過,就追悔莫及了。我想這就是云計算特別強調可擴展能力的原因吧。
【小表廣播】
小表廣播也是我們在分布式數(shù)據(jù)庫領域內最常用的工具之一,他的核心目的其實都是一個——盡可能讓查詢只發(fā)生在單機。
讓我們用一個例子來說明,小表廣播的一般使用場景。
圖5 小表廣播場景
圖5中,如果我想知道買家id等于0的用戶在商城里面買了哪些商品,我們一般會先將這兩個表join起來,然后再用where平臺名=”商城” and buyerID = 0找到符合要求的數(shù)據(jù)。然而這種join的方式,會導致大量的針對左表的網(wǎng)絡I/O。如果要取出的數(shù)據(jù)量比較大,系統(tǒng)延遲會明顯上升。
這時候,為了提升性能,我們就必須要減少跨機join的網(wǎng)絡代價。我們比較推薦應用做如下處理,將左表復制到右表的每一個庫上。這樣,join操作就由分布式join一下變回到本地join,系統(tǒng)的性能就有很大的提升了,如圖6所示。
圖6
【分布式事務套件】
在阿里巴巴的業(yè)務體系中存在非常多需要事務類的場景,下單減庫存,賬務,都是事務場景最集中的部分。
而我們處理事務的方法卻和傳統(tǒng)應用處理事務的方案不大一樣,我們非常強調事務的最終一致性和異步化。利用這種方式,能夠極大地降低分布式系統(tǒng)中鎖持有的時間,從而極大地提升系統(tǒng)性能。
圖7 DRDS分布式事務解決套件
這種處理機制,是我們分布式事務能夠以極低成本大量運行的最核心法門。在DRDS平臺內,我們將這些方案產品化,為了DRDS的分布式事務解決套件。
利用他們,能夠讓你以比較低的成本,實現(xiàn)低延遲,高吞吐的分布式事務場景。
DRDS的未來
阿里分布式數(shù)據(jù)庫服務DRDS上線至今,大家對這款產品的熱情超出了我們的預期,短短半年內已經有幾千個申請。
盡管還在公測期,但是大家就已經把關系到身家性命的寶貴在線數(shù)據(jù)業(yè)務放到了DRDS上,我能夠感受到這份沉甸甸的信賴,也不想辜負這份信賴。
經過阿里內部幾千個應用的不斷歷練,DRDS已經積累出一套強大的分布式SQL執(zhí)行引擎和和一整套分布式事務套件。
我也相信,這些積累能夠讓用戶在基本保持單機數(shù)據(jù)庫的使用習慣的前提下,享受到分布式數(shù)據(jù)庫高性能可擴展的好處。
在平時的DRDS支持過程中,我面對最多的問題就是,DRDS能不能夠在不改變任何原有業(yè)務邏輯和代碼的前提下,實現(xiàn)可自由伸縮和擴展呢?十分可惜的是,關系數(shù)據(jù)庫發(fā)展至今,還沒有找到既能保留傳統(tǒng)數(shù)據(jù)庫一切特性,又能實現(xiàn)高性能可擴展數(shù)據(jù)庫的方法。
然而,雖不能至,吾心向往之!我們會以“可擴展,高性能”為產品核心,堅定地走在追尋圣杯的路上,并堅信最終我們一定能夠找尋到它神圣的所在。
作者簡介:王晶昱,花名沈詢,阿里巴巴資深技術專家。目前主要負責阿里的分布式數(shù)據(jù)庫DRDS(TDDL)和阿里的分布式消息服務ONS(RocketMQ/Notify)兩個系統(tǒng)。
開源世界中的那幾個免費數(shù)據(jù)庫
發(fā)布時間:2011-11-22 09:34:30 來源:CSDN 評論:0 點擊:1476 次 【字號:大 中 小】
QQ空間 新浪微博 騰訊微博 人人網(wǎng) 豆瓣網(wǎng) 百度空間 百度搜藏 開心網(wǎng) 復制 更多 0
開源數(shù)據(jù)庫MySQLMySQL是一個開放源碼的小型關聯(lián)式數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源...
開源數(shù)據(jù)庫MySQL
MySQL是一個開放源碼的小型關聯(lián)式數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。目前MySQL被廣泛地應用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。
盤點:開源社區(qū)那些免費的數(shù)據(jù)庫軟件
MySQL為多種編程語言提供了API,包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。而其自身是采用C和C++編寫的,使用了多種編譯器進行測試,所以,MySQL能夠保證源代碼具有很強的可移植性。這樣的一款數(shù)據(jù)庫,自然能夠支持幾乎所有的操作系統(tǒng),從Unix、Linux到Windows,具體包括AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多種操作系統(tǒng)。最重要的是,它是一個可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。
與此同時,MySQL也產生了很多分支版本的數(shù)據(jù)庫也非常值得推薦。
首先是MariaDB,它是一個采用Maria存儲引擎的MySQL分支版本,是由原來MySQL的作者 Michael Widenius創(chuàng)辦的公司所開發(fā)的免費開源的數(shù)據(jù)庫服務器。與MySQL相比較,MariaDB更強的地方在于它擁有更多的引擎,包括Maria存儲引擎、PBXT存儲引擎、XtraDB存儲引擎、FederatedX存儲引擎,它能夠更快的復制查詢處理、運行的速度更快、更好的功能測試以及支持對Unicode的排序等。
其次是rcona,它為MySQL數(shù)據(jù)庫服務器進行了改進,在功能和性能上較MySQL有著很顯著的提升。該版本提升了在高負載情況下的InnoDB的性能,同時,它還為DBA提供一些非常有用的性能診斷工具,并且提供很多參數(shù)和命令來控制服務器行為。
第三是Percona Server,它使用了諸如google-mysql-tools、Proven Scaling和 Open Query對MySQL進行改造。并且,它只包含MySQL的服務器版,并沒有提供相應對 MySQL的Connector和GUI工具進行改進。
非關系型數(shù)據(jù)庫NoSQL
從NoSQL的字面上理解,NoSQL就是Not Only SQL,被業(yè)界認為是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關系型的數(shù)據(jù)存儲,相對于目前鋪天蓋地的關系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。
盤點:開源社區(qū)那些免費的數(shù)據(jù)庫軟件
當然,NoSQL也是隨著互聯(lián)網(wǎng)Web2.0網(wǎng)站的興起才能取得長足的進步。關鍵的需求在于,傳統(tǒng)的關系數(shù)據(jù)庫在應付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
首先推薦的是Oracle NoSQL Database,這是一個社區(qū)版。Oracle的這個NoSQL Database, 是在10月4號的甲骨文全球大全上發(fā)布的Big Data Appliance的其中一個組件,Big Data Appliance是一個集成了Hadoop、NoSQL Database、Oracle數(shù)據(jù)庫Hadoop適配器、Oracle數(shù)據(jù)庫Hadoop裝載器及R語言的系統(tǒng)。
其次推薦的是Membase。Membase是NoSQL家族的一個新的重量級的成員。Membase是開源項目,源代碼采用了Apache2.0的使用許可。該項目托管在GitHub.Source tarballs上,目前可以下載beta版本的Linux二進制包。該產品主要是由North Scale的memcached核心團隊成員開發(fā)完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區(qū)網(wǎng)絡空間的供應商。
并且,Membase容易安裝、操作,可以從單節(jié)點方便的擴展到集群,而且為memcached(有線協(xié)議的兼容性)實現(xiàn)了即插即用功能,在應用方面為開 發(fā)者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中 Memcached的部分基礎代碼被直接應用到了Membase服務器的前端。通過兼容多種編程語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置 的告警信息。
Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統(tǒng)一的節(jié)點進行復制。 另外,對存儲的數(shù)據(jù)進行再分配仍然是必要的。
第三推薦的是Hibari。Hibari在日語中意思為“云雀”,它是一個專為高可靠性和大數(shù)據(jù)存儲的數(shù)據(jù)庫引擎,可用于云計算環(huán)境中,例如 webmail、SNS和其他要求T/P級數(shù)據(jù)存儲的環(huán)境中。同時,Hibari也支持Java,C/C++,Python,Ruby和Erlang語言的客戶端。
第四推薦的是memcachedb。這是一個由新浪網(wǎng)的開發(fā)人員開放出來的開源項目,給memcached分布式緩存服務器添加了Berkeley DB的持久化存儲機制和異步主輔復制機制,讓memcached具備了事務恢復能力、持久化能力和分布式復制能力,非常適合于需要超高性能讀寫速度,但是 不需要嚴格事務約束,能夠被持久化保存的應用場景,例如memcachedb被應用在新浪博客上面。
第五推薦的是Leveldb。這是一個Google實現(xiàn)的非常高效的kv數(shù)據(jù)庫,目前的版本1.2能夠支持billion級別的數(shù)據(jù)量了。 在這個數(shù)量級別下還有著非常高的性能,主要歸功于它的良好的設計,特別是LSM算法。LevelDB是單進程的服務,性能非常之高,在一臺4個Q6600的CPU機器上,每秒鐘寫數(shù)據(jù)超過40w,而隨機讀的性能每秒鐘超過10w。
XML數(shù)據(jù)庫的優(yōu)勢
XML數(shù)據(jù)庫是一種支持對XML格式文檔進行存儲和查詢等操作的數(shù)據(jù)管理系統(tǒng)。在系統(tǒng)中,開發(fā)人員可以對數(shù)據(jù)庫中的XML文檔進行查詢、導出和指定格式的序列化。目前XML數(shù)據(jù)庫有三種類型:XMLEnabledDatabase(XEDB),即能處理XML的數(shù)據(jù)庫;NativeXMLDatabase(NXD),即純XML數(shù)據(jù)庫;HybridXMLDatabase(HXD),即混合XML數(shù)據(jù)庫。
關系數(shù)據(jù)庫中的第一代XML支持是切分(或分解)文檔,以適應關系表格或將文檔原封不動地存儲為字符或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種都嘗試將XML模型強制轉換成關系模型。然而,這兩種方法在功能和性能上都有很大的局限性。混合型模型將XML存儲在類似于DOM的模型中。XML數(shù)據(jù)被格式化為緩沖數(shù)據(jù)頁,以便快速導航和執(zhí)行查詢以及簡化索引編制。
在這里,首要要推薦的XML數(shù)據(jù)庫是Sedna。它號稱是一款原生態(tài)的XML數(shù)據(jù)庫,提供了全功能的核心數(shù)據(jù)庫服務,包括持久化存儲、ACID事務、索引、安全、熱備、UTF8等。實現(xiàn)了 W3C XQuery 規(guī)范,支持全文搜索以及節(jié)點級別的更新操作。
第二款XML數(shù)據(jù)庫是BaseX。這款數(shù)據(jù)庫用來存儲緊縮的XML數(shù)據(jù),提供了高效的 XPath和XQuery的實現(xiàn),同時,它還提供一個前端操作界面。
盤點:開源社區(qū)那些免費的數(shù)據(jù)庫軟件
第三款推薦的是XMLDB。這款數(shù)據(jù)庫使用了關系型數(shù)據(jù)庫來存儲任意的XML文檔,因為所采用的存儲機制,所以文檔的搜索速度特別快,同時執(zhí)行XSL轉換也相當快。XMLDB同時還提供了一個PHP的模塊,可以應用在Web應用中。
第四塊推薦的是X-Hive/DB。它是一個為需要高級XML數(shù)據(jù)處理和存儲功能的軟件開發(fā)者設計的強大的專屬XML數(shù)據(jù)庫。X-Hive/DB Java API包含存儲、查詢、檢索、轉換和發(fā)表XML數(shù)據(jù)的方法。
與傳統(tǒng)關系型數(shù)據(jù)庫相比,XML數(shù)據(jù)庫具有以下優(yōu)勢:第一,XML數(shù)據(jù)庫能夠對半結構化數(shù)據(jù)進行有效的存取和管理。如網(wǎng)頁內容就是一種半結構化數(shù)據(jù),而傳統(tǒng)的關系數(shù)據(jù)庫對于類似網(wǎng)頁內容這類半結構化數(shù)據(jù)無法進行有效的管理。第二,提供對標簽和路徑的操作。傳統(tǒng)數(shù)據(jù)庫語言允許對數(shù)據(jù)元素的值進行操作,不能對元素名稱操作,半結構化數(shù)據(jù)庫提供了對標簽名稱的操作,還包括了對路徑的操作。第三,當數(shù)據(jù)本身具有層次特征時,由于XML數(shù)據(jù)格式能夠清晰表達數(shù)據(jù)的層次特征,因此XML數(shù)據(jù)庫便于對層次化的數(shù)據(jù)進行操作。XML數(shù)據(jù)庫適合管理復雜數(shù)據(jù)結構的數(shù)據(jù)集,如果己經以XML格式存儲信息,則XML數(shù)據(jù)庫利于文檔存儲和檢索;可以用方便實用的方式檢索文檔,并能夠提供高質量的全文搜索引擎。另外XML數(shù)據(jù)庫能夠存儲和查詢異種的文檔結構,提供對異種信息存取的支持。
本文題目:包含nosql分發(fā)機制的詞條
本文來源:http://chinadenli.net/article17/dsgcgdj.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、App設計、外貿網(wǎng)站建設、響應式網(wǎng)站、網(wǎng)站策劃、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)