欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
YunTable-云時(shí)代的BigTable : 彎曲評論
YunTable-云時(shí)代的BigTable
作者吳朱華 | 2010-10-09 19:48 | 類(lèi)型行業(yè)動(dòng)感 |2條用戶(hù)評論 »
本文是發(fā)表于今年第九期《程序員》上的關(guān)于YunTable綜述,希望大家能喜歡。
無(wú)論哪個(gè)行業(yè),掌握核心技術(shù)的企業(yè)總能處于非常強勢的地位,并獲取較高的利潤,在IT界更是如此,比如,強大的搜索引擎和精妙的iOS給Google和蘋(píng)果帶來(lái)不僅是市場(chǎng)上的領(lǐng)導地位,更有豐厚的利潤。身為一個(gè)在云計算相關(guān)領(lǐng)域做了三年研究的人,我不禁自問(wèn),在云計算行業(yè),什么是最核心的技術(shù)呢?也就是說(shuō),什么核心技術(shù)我們最好能掌握呢?經(jīng)過(guò)我一番思索,總結出兩個(gè):其一是系統虛擬化技術(shù),它是IaaS(基礎設施即服務(wù))云最核心的組件,相關(guān)的技術(shù)有開(kāi)源的Xen,KVM和VMware的vSphere;其二是分布式數據庫技術(shù),其是PaaS(平臺即服務(wù))云最重要的模塊,相關(guān)的技術(shù)有Google的BigTable,Apache的HBase和Facebook的Cassandra等。同樣在實(shí)現難度方面,這兩個(gè)技術(shù)也是最大的。雖然這兩種技術(shù)都有相應的開(kāi)源版本,但是如果我們不能去親身去開(kāi)發(fā)和實(shí)現這個(gè)技術(shù),那么對我們而言,所能獲得只能是類(lèi)似使用經(jīng)驗這類(lèi)的皮毛而已,但如果能讓我們掌握其核心的實(shí)現方法的話(huà),這樣不僅能使我們有機會(huì )開(kāi)發(fā)出在性能和用戶(hù)體驗這兩方面更出色的版本,而且同時(shí)也能按照不同的業(yè)務(wù)需求來(lái)做相應的優(yōu)化,并能通過(guò)這個(gè)項目聚集一批具有實(shí)干精神和云時(shí)代思維的程序員。
雖然我個(gè)人在Java方面有較豐富的項目經(jīng)驗,但可惜缺乏在C語(yǔ)言方面的歷練,所以不敢直接涉足系統虛擬化技術(shù)所需的內核層開(kāi)發(fā),因為在調試方面缺乏類(lèi)似GDB這樣簡(jiǎn)單易用的工具,所以選擇了用戶(hù)層的分布式數據庫技術(shù)做為突破口,并將Google的BigTable技術(shù)作為模板來(lái)進(jìn)行開(kāi)發(fā),項目名為YunTable,其含義就是云時(shí)代的BigTable。在深入YunTable之前,先簡(jiǎn)要地介紹一下BigTable,它是由Google自主研發(fā)的分布式數據庫技術(shù),并主要在其內部使用,它能可靠地處理PB以上級別的數據,能支持千臺服務(wù)器以上的集群,并能實(shí)現適用性廣泛、可擴展、高性能和高可用性這四個(gè)目標,同時(shí)BigTable更是已經(jīng)在超過(guò)60個(gè)Google的產(chǎn)品和項目上得到了應用,包括 Google Analytics、Google Finance、Orkut、Personalized Search、Writely、Google Earth和YouTube等,也作為業(yè)界領(lǐng)先的PaaS云Google App Engine底層的數據存儲系統。
YunTable的目標
由于BigTable的功能非常豐富和全面,所以作為一個(gè)業(yè)余的開(kāi)源項目不可能像它那樣面面俱到,所以YunTable的目標是做一個(gè)BigTable的精簡(jiǎn)版,并使其更適合云環(huán)境,它和BigTable之間的關(guān)系非常類(lèi)似Drizzle和MySQL。
在開(kāi)發(fā)過(guò)程中,首先專(zhuān)注于為YunTable實(shí)現BigTable最核心的功能,那么BigTable最核心的功能有那些了?個(gè)人認為主要有三個(gè)方面:
簡(jiǎn)單的數據模型和靈活的格式:和傳統的關(guān)系型數據庫不同的是,BigTable在數據模型方面,并沒(méi)有選擇強大和復雜,而是提供了非常簡(jiǎn)單的數據模型,通過(guò)這個(gè)模型,用戶(hù)可以動(dòng)態(tài)控制數據的格式,也就是說(shuō),數據本身是沒(méi)有固定的格式(Schema),具體格式由用戶(hù)自己的應用控制。 分布式的設計以支撐龐大的集群:首先,選擇了在語(yǔ)義和實(shí)現上都非常簡(jiǎn)單明了的Single Master模式來(lái)管理整個(gè)集群,但是為了能讓一個(gè)Master節點(diǎn)能管理上千個(gè)子節點(diǎn),所以Master只負責子節點(diǎn)之間數據的分布,實(shí)際數據的處理則與Master無(wú)關(guān),而由Client端和子節點(diǎn)之間進(jìn)行交互來(lái)完成。 基于Column的存儲:傳統的關(guān)系型數據庫主要以Row為單位存儲的,也就是將同一個(gè)Row的數據存放在一起,而B(niǎo)igTable則將屬于同一個(gè)Column或者同一個(gè)Column Family的數據存放在一起。由于鄰近的數據都屬于同一個(gè)Column或者相似的Column,所以?xún)热菔潜容^類(lèi)似的。在這個(gè)情況下,可以通過(guò)使用壓縮算法來(lái)對數據進(jìn)行高效率的壓縮,這樣不僅能有效地降低數據的存儲空間,而且通過(guò)減少數據讀取的數量來(lái)提升系統運行的速度。
接著(zhù),由于不同的云環(huán)境會(huì )有不同的需求,比如,有些云環(huán)境主要用于海量的數據存儲,有些云環(huán)境需要數據快速的讀寫(xiě),而有些云環(huán)境則追求強一致性,所以YunTable會(huì )在之前精簡(jiǎn)版的基礎上,進(jìn)行下一步的設計和開(kāi)發(fā),使用戶(hù)只需通過(guò)設定幾個(gè)不同的參數值就能使YunTable適應不同的云環(huán)境,并且簡(jiǎn)單易用。但因為YunTable還處于初創(chuàng )期,還沒(méi)有涉及到上面提到的下一步的設計和開(kāi)發(fā),所以本文接下來(lái)的部分將詳細介紹YunTable的數據模型、命令行和架構等方面的設計,也就是YunTable是如何實(shí)現BigTable的核心功能。
YunTable的數據模型
作為BigTable的傳承,YunTable的數據模型也非常簡(jiǎn)潔,一個(gè)Table也是有基本的Row和Column組成,但只支持Row的值或者名字作為唯一鍵值用來(lái)排序和之后的索引,在規模上,一個(gè)Table的規模在理論上可以達到PB級,比如:用于存儲中國所有公民的個(gè)人信息或者互聯(lián)網(wǎng)上所有網(wǎng)站內容的表。下面是一個(gè)簡(jiǎn)單的例子:
圖1.  Table的例子
由于每個(gè)Table都會(huì )有成百上千的Column,而大多數查詢(xún)只需得到其中少數幾個(gè)Column,所以如果每次查詢(xún)都將所有的Column取出來(lái)的話(huà),這樣會(huì )得不償失,所以YunTable引入了Column Family這個(gè)特性,通過(guò)這個(gè)特性能將多個(gè)Column并為一個(gè)小組,比如:下圖的“家庭地址”和“工作地址”都隸屬于“地址”這個(gè)Column Family,這樣做的最大的好處是能將這些Column放在一起存儲,這樣不僅能提高存取效率,而且能避免讀取過(guò)多的Column,比如,可以選擇只選取一個(gè)Column Family。Column Family還能用于訪(fǎng)問(wèn)權限控制,比如:“地址”這個(gè)Column Family只能讓負責管理地址的部門(mén)訪(fǎng)問(wèn)。還有,在Table剛創(chuàng )建的時(shí)候,YunTable會(huì )自動(dòng)為這個(gè)Table創(chuàng )建一個(gè)默認Column Family,名為“default_cf”,如果數據在插入的時(shí)候,沒(méi)有定義其Column Family,系統會(huì )默認其屬于“default_cf”,比如:在圖2中,Column名為“名字”或者“性別”的數據都屬于“default_cf”,但在顯示的時(shí)候,為了美觀(guān),默認不顯示“default_cf”。
圖2. Column Family的例子
雖然上面這個(gè)例子只有三個(gè)Row和五個(gè)Column,但如果這個(gè)表存儲的數據不斷增大的話(huà),YunTable會(huì )將這個(gè)表切為多個(gè)Tablet(分片),并讓這些Tablet分布到不同服務(wù)器上,每個(gè)Tablet都會(huì )負責一定范圍的Row Name,比如,在下圖中,Tablet1負責Row Name為310101至310102的數據。
圖3. Tablet
為了幫助數據的同步和備份,系統還為每個(gè)Cell(單元格)設置相應的Timestamp,系統會(huì )根據多個(gè)屬于同一位置的Cell的Timestamp,來(lái)判斷哪個(gè)Cell是最新的。
YunTable的命令行
YunTable自帶一套命令行,主要用于數據處理方面,共支持三個(gè)命令。
add:有兩大功能:其一是創(chuàng )建新的Table,格式是“add table:table_name”,在這里”table_name”是等待用戶(hù)輸入table名字的占位符,示例:“add table:people” ;其二是為選定的Table創(chuàng )建新的Column Family,格式是“add table:table_name column_family:column_family_name”,在這里,“table_name”為選定Table的名字,“column_family_name”則是新Column Family的名字,具體的例子:“add table:people column_family:address”。 put:主要是用于添加一行新的數據,其格式是“put table  row:row_name column_name:”column_value” column_family_name.column_name:”column_value””,在這里”row”是關(guān)鍵詞,在其冒號后輸入相應的Row Name,比如,在后面例子里面提到的”me“,在row之后那些,都不是關(guān)鍵字,只要按照那些占位符輸入相應參數就可以,具體也可以參看后面的例子,但要注意兩點(diǎn):其一,如果這個(gè)column不屬于系統默認的column family,那么請在column前輸入相關(guān)的Column Family,并用“.” 來(lái)連接兩者;其二,用戶(hù)可以使用英文的雙引號來(lái)包裹帶空格等特殊字符的Column Value。例子:“put table:people row:me name:"ike" sex:"male" address.homeaddress:"sh"”。 get:可以通過(guò)這個(gè)命令來(lái)獲取數據, 格式為“get table:table_name row:row_name”,通過(guò)這個(gè)命令會(huì )顯示這個(gè)Row Name相對應的數據,例子:“get table:people row:me”,在顯示數據的時(shí)候,系統還會(huì )根據Timestamp對數據進(jìn)行過(guò)濾,也意味著(zhù),多個(gè)相同的Cell只會(huì )顯示最新的一個(gè)。
總的來(lái)說(shuō),現在YunTable的命令行已經(jīng)支持CRUD中創(chuàng )建,添加和查詢(xún),并會(huì )在今后的版本中增加對刪除的支持。
YunTable的架構
圖4. YunTable的架構圖
在架構上,主要可分為Region、Master和Client這三個(gè)模塊,而且這三個(gè)模塊都是獨立的,并負責各自的業(yè)務(wù)邏輯。首先,介紹一下Master節點(diǎn)。
節點(diǎn)
隨著(zhù)項目的發(fā)展,Master節點(diǎn)的作用也在不斷地變化中,特別是0.2版中引入了BigTable中輕Master的理念,也就是說(shuō),0.2版中的Master已經(jīng)不像之前版本那樣負責在Region和Client之間對請求和數據進(jìn)行分發(fā),而只負責維護Table和Region節點(diǎn)之間的對應關(guān)系,實(shí)際數據的查詢(xún)和輸入則都通過(guò)Region節點(diǎn)和Client端之間的交互完成,和Master無(wú)關(guān),這樣能有效地減輕Master的負擔,使得其能支撐百臺服務(wù)器以上的集群。舉個(gè)例子,比如,當一個(gè)Client端需要處理某個(gè)Table的時(shí)候,它只需在第一次處理時(shí)候,向Master請求和這個(gè)Table相關(guān)的Region節點(diǎn)的地址,當之后再次處理到這個(gè)Table的時(shí)候,Client端無(wú)需再和Master節點(diǎn)進(jìn)行溝通,而是直接和相關(guān)的Region節點(diǎn)進(jìn)行交互即可。
節點(diǎn)
Region節點(diǎn),也就是上面所提到的子節點(diǎn),其作用是負責來(lái)自Client端的數據處理請求,并存儲和管理大量的數據,Region節點(diǎn)非常類(lèi)似BigTable論文中所提到的Tablet服務(wù)器。每個(gè)Region服務(wù)器管理多個(gè)Tablet,每個(gè)Tablet對應一個(gè)Column Family,并負責存儲屬于這個(gè)Column Family的數據。除了管理多個(gè)Tablet之外,Region服務(wù)器還自帶WAL日志,全稱(chēng)為“Write-Ahead Log”,主要用于暫存那些最新的數據更新請求,以避免當Tablet中的Memstore被意外關(guān)閉時(shí)所造成的數據丟失,而當Memstore完成對數據的寫(xiě)入之后,WAL也會(huì )清空那些對應的請求。
Tablet,就像上面所說(shuō)的那樣,每個(gè)Tablet對應一個(gè)column family,而一個(gè)Table會(huì )有多個(gè)Column Family組成,所以一個(gè)Table也是由多個(gè)有可能分布在不同機器上的Tablet組成。Tablet的實(shí)際存儲形式為一個(gè)以“Tablet”為前綴的目錄。Tablet主要有兩大部分組成:其一是Memstore:其是緩存在內存的數據文件,主要存儲最新添加的數據,當Memstore存儲的數據接近限定值時(shí),在Memstore上緩存的數據都將會(huì )被沖刷(Flush)到YFile中;其二是YFile,他是主要用于存儲數據的持久化文件,在格式上,它是一連串經(jīng)過(guò)排序的鍵值對,并在文件的末尾加入相應的索引,并且在寫(xiě)入之后是不可修改(Immutable)的,YFile只會(huì )在當Memstore被觸發(fā)沖刷時(shí)創(chuàng )建,平時(shí)常被順序讀,這樣能有效地利用硬盤(pán)順序讀性能好的特性。YFile在實(shí)現方面參考了HBase的HFile格式和Google的SSTable格式,并做了相應的簡(jiǎn)化,文件的位置在其所屬Tablet的目錄中。
現在Client端基本等同于前面提到的命令行,主要用于讓用戶(hù)輸入與數據處理相關(guān)的命令,并與后端的Master節點(diǎn)和Region節點(diǎn)進(jìn)行交互,但隨著(zhù)時(shí)間的發(fā)展,在形式上,Client端有可能是類(lèi)似JDBC的驅動(dòng)等。
工作流程
在流程方面,將介紹一下YunTable數據的添加和查詢(xún)這兩個(gè)流程,以讓大家進(jìn)一步理解YunTable的架構。
添加流程:
用戶(hù)在Client端輸入添加命令,比如:“put table:people row:me address.homeaddress:"sh"”。 Client會(huì )查找其緩存是不是有和命令中提到的“people”Table相對應的Region(可以對應多個(gè))的信息,如果沒(méi)有的話(huà),Client會(huì )去訪(fǎng)問(wèn)Master節點(diǎn)去獲取相關(guān)信息。 當Client得到對應Region的地址時(shí),并會(huì )將這個(gè)命令發(fā)送出去。 之后,Region先將這個(gè)請求記錄到WAL中,接著(zhù)會(huì )將根據請求中數據所屬Table和Column Family來(lái)傳遞給對應的Tablet,比如,在上面例子中,應該傳遞給屬于“People”這個(gè)Table,并且Column Family為“address”的Tablet。 Tablet會(huì )將這個(gè)請求添加至Memstore中,并返回Region添加成功的信息,最后,Region會(huì )把這個(gè)信息傳回給Client端。
查詢(xún)流程:
用戶(hù)在Client端輸入添加命令,比如:“get table:people row:me”。 與上面第2步一致。 與上面第3步一致。 Region會(huì )輪詢(xún)本地所有屬于“People”這個(gè)Table 的Tablet。 每個(gè)Tablet都會(huì )查詢(xún)其Memstore和所有YFile,得到所有Row Name為”me”的數據,并將這些數據訪(fǎng)問(wèn)Region。 Region接著(zhù)把這些數據返回給Client,之后Client會(huì )通過(guò)返回數據的Timestamp來(lái)去掉其中那些過(guò)期的數據,并留下的最新的數據,將它們顯示在命令行中。
YunTable的規劃
在規劃方面,YunTable0.1版至0.8版主要是實(shí)現BigTable的核心功能,并完成相應的分布式測試,而0.9版則是主要完成下一步的設計,開(kāi)發(fā)和測試,以使YunTable更適應云環(huán)境。
下面是在具體的規劃:
特性
BigTable*
介紹
版本
Key和Value的格式
Y
可以是任意字節數組
0.1
Column Family
Y
通過(guò)Column Family來(lái)對數據進(jìn)行分類(lèi)管理
0.1
支持SSTable的格式
Y
讓數據文件一次寫(xiě)入,之后不可更改,來(lái)為I/O的性能做優(yōu)化
0.1
Block Index
Y
在SSTable文件的尾部加入相關(guān)的Index,以提升查詢(xún)速度
0.1
Memstore
Y
就是讓比較新的數據放置在內存中以加快查詢(xún)速度
0.1
Write Ahead Log
Y
每個(gè)Region節點(diǎn)會(huì )有一個(gè)Write Ahead Log來(lái)記錄數據修改的信息,以免保存在Memstore中的數據丟失
0.1
CRUD命令
Y
支持基本的數據修改和查詢(xún)的命令
0.2
管理命令
Y
支持命令行來(lái)管理Master和Region
0.2
輕量級Master
Y
讓Master所承受的負擔盡量最小化,以讓其支撐和管理更大的集群
0.2
備份
Y
通過(guò)將數據進(jìn)行多次備份,來(lái)避免數據丟失的情況
0.8
Bloom Filter
Y
用于讓系統快速確定這個(gè)Region節點(diǎn)是否存有所需的值
0.8
Row排序
Y
主要支持按照字典順序(lexicographic order)對Row排序
0.8
容災支持
Y
要確保當某個(gè)Region節點(diǎn)失效時(shí),Client也能很好地處理數據
0.8
批處理
Y
能批量向YunTable插入大量的數據
0.8
壓縮
Y
通過(guò)壓縮數據,來(lái)提升速度
0.8
客戶(hù)端驅動(dòng)
Y
比如,類(lèi)似JDBC的驅動(dòng)
1.0
Master standby
Y
Master會(huì )有一個(gè)對應的standby節點(diǎn),來(lái)應對Master節點(diǎn)失效的情況
1.0
模塊化
N
使得YunTable整體更模塊化,來(lái)輕松應對新功能的添加
1.0
訪(fǎng)問(wèn)安全
N
增強YunTable的安全性
1.0
為云環(huán)境做優(yōu)化
N
使YunTable更適合云環(huán)境
1.0
表1. 在功能特性方面的初步規劃(*BigTable這欄里面的“Y”表示BigTable支持這個(gè)功能,而“N”表示這個(gè)功能不屬于BigTable的范疇)
(2個(gè)打分, 平均:5.00 / 5)
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Bigtable Notes
BigTable小結
Google架構學(xué)習
HBase與BigTable的比較
全球級的分布式數據庫 Google Spanner原理
Google服務(wù)器架構圖解簡(jiǎn)析(轉載)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久