數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第1頁(yè)
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第2頁(yè)
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第3頁(yè)
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第4頁(yè)
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)中心產(chǎn)品開發(fā)標(biāo)準(zhǔn)XXXX公司XX業(yè)務(wù)部XXXX年XX月文檔說明本文檔所涉及到的文字、圖表等,僅限于內(nèi)部使用,未經(jīng)雙方書面許可,請(qǐng)勿擴(kuò)散到第三方。文檔屬性屬性內(nèi)容客戶名稱:工程名稱:SUBJECT文檔主題:文檔編號(hào):文檔版本:版本日期:文檔狀態(tài):文檔變更版本修訂日期修訂人描述文檔送呈單位姓名目的審閱參閱目錄TOC\o"1-5"\h\z\u1 概述 51.1 最根本原那么 52 Java技術(shù)標(biāo)準(zhǔn) 62.1 平臺(tái)使用的相關(guān)技術(shù) 6 根本核心框架包 6 其他框架包 62.2 程序設(shè)計(jì)標(biāo)準(zhǔn) 7 命名約定 8 包名,類名,方法名,屬性名,常量名命名約定 9 注釋約定 10 快速瀏覽JavaDoc 112.3 開發(fā)標(biāo)準(zhǔn) 12 工程結(jié)構(gòu)說明 12 整體包結(jié)構(gòu)說 12 工程模塊包結(jié)構(gòu)及命名 13 各子工程模塊功能包結(jié)構(gòu) 14 配置文件包結(jié)構(gòu) 142.4 命名規(guī)那么 15 共用類 15 業(yè)務(wù)層 15 展現(xiàn)層 15 模型層 16 持久層 16 XML配置 16 資源文件 19 JSP文件 20 事務(wù)命名約束 20 JS命名約束 213 數(shù)據(jù)庫(kù)技術(shù)標(biāo)準(zhǔn) 223.1 概述 223.2 命名根本規(guī)那么 223.3 數(shù)據(jù)庫(kù)表空間 22 命名根本規(guī)那么 223.4 默認(rèn)用戶方案 223.5 表的命名規(guī)那么、約定 223.6 視圖的命名規(guī)那么、約定 233.7 字段命名規(guī)那么、約定 233.8 存儲(chǔ)過程的命名規(guī)那么、約定 233.9 序列對(duì)象的命名規(guī)那么、約定 243.10 觸發(fā)器命名規(guī)那么、約定 244 HIVE技術(shù)標(biāo)準(zhǔn) 255 HBase設(shè)計(jì)標(biāo)準(zhǔn) 265.1 Namespace命名空間設(shè)計(jì) 265.2 1.2.Table表設(shè)計(jì) 27 理想HBase表 27 預(yù)創(chuàng)立分區(qū) 28 列族數(shù)量 28 可配置的數(shù)據(jù)塊大小 29 數(shù)據(jù)塊緩存 29 激進(jìn)緩存 29 布隆過濾器〔Bloomfilters〕 30 生存時(shí)間〔TTL〕 31 數(shù)據(jù)壓縮 32 數(shù)據(jù)分割 33 單元時(shí)間版本 345.3 ColumnFamily列族設(shè)計(jì) 355.4 Qualifier列設(shè)計(jì) 365.5 版本設(shè)計(jì) 375.6 HBase命名標(biāo)準(zhǔn) 37概述本文提供一整套編寫高效可靠的Java代碼的標(biāo)準(zhǔn)、約定和指南。它們以平安可靠的軟件工程原那么為根底,使代碼易于理解、維護(hù)和增強(qiáng)。而且,通過遵循這些程序設(shè)計(jì)標(biāo)準(zhǔn),你作為一個(gè)Java軟件開發(fā)者的生產(chǎn)效率會(huì)有顯著提高。經(jīng)驗(yàn)證明,假設(shè)從一開始就花時(shí)間編寫高質(zhì)量的代碼,那么在軟件開發(fā)階段,對(duì)代碼的修改要容易很多。最后,遵循一套通用的程序設(shè)計(jì)標(biāo)準(zhǔn)將帶來更大的一致性,使軟件開發(fā)團(tuán)隊(duì)的效率明顯提高。最根本原那么運(yùn)用常識(shí)當(dāng)找不到任何規(guī)那么或指導(dǎo)方針,當(dāng)規(guī)那么明顯不能適用,當(dāng)所有的方法都失效的時(shí)侯:運(yùn)用常識(shí)并核實(shí)這些根本原那么。這條規(guī)那么比其它所有規(guī)那么都重要。駝峰命名法駝峰命名法〔Camel-Case〕:就是當(dāng)變量名或函式名是由一個(gè)或多個(gè)單字連結(jié)在一起,而構(gòu)成的唯一識(shí)別字時(shí),第一個(gè)單字以小寫字母開始;第二個(gè)單字的首字母大寫或每一個(gè)單字的首字母都采用大寫字母,例如:myFirstName、myLastName,這樣的變量名看上去就像駱駝峰一樣此起彼伏,故得名。駝峰命名法的命名規(guī)那么可視為一種慣例,并無(wú)絕對(duì)與強(qiáng)制,目的是增加識(shí)別和可讀性。Java技術(shù)標(biāo)準(zhǔn)平臺(tái)使用的相關(guān)技術(shù)平臺(tái)使用的框架包分核心框架包和其他必須的框架包,各框架包本身所依賴的開源包不做列舉,由框架包本身的信息來定。根本核心框架包平臺(tái)采用Spring+Struts2+myBatis的三層架構(gòu)作為根本框架。〔JDK1.6+〕。參考如下:名稱版本備注Struts22.2.1Springmybatis-core不支持跨數(shù)據(jù)庫(kù)建議,目前開發(fā)在mysql上,現(xiàn)網(wǎng)環(huán)境在db2上mybatis-springMySQL5.0Tomcat7.0jQuery1.8其他框架包除根本框架外,平臺(tái)其他將采用的一些框架包,參考如下:〔JDK1.5+〕名稱版本備注SpringSecurityApacheCommons2.6常用的工具包等SLF4JApacheLogginglog4j5ApacheAntOscacheXMemcacheC3P0Dom4j2.0commons-beanutilsMybatis-springHadoop-coreHive-cliHbase程序設(shè)計(jì)標(biāo)準(zhǔn)Java的程序設(shè)計(jì)標(biāo)準(zhǔn)很重要,原因在于它將提高開發(fā)團(tuán)隊(duì)各成員的代碼的一致性。一致性的提高會(huì)使代碼更易理解,這意味著它更易開發(fā)和維護(hù)。從而降低了應(yīng)用程序的總開發(fā)本錢。你必須牢記的是:你的Java代碼在你已離開并開始另一個(gè)工程之后,會(huì)保存相當(dāng)長(zhǎng)的一段時(shí)間。因此開發(fā)過程中一個(gè)很重要的目標(biāo)就是要確保在開發(fā)成員或開發(fā)團(tuán)隊(duì)之間的工作可以順利交接,不必花很大的力氣便能理解已編寫的代碼,以便繼續(xù)維護(hù)和改良以前的工作。如果代碼難以理解,很有可能被廢棄和重寫。s命名約定我們將在整個(gè)標(biāo)準(zhǔn)中討論命名約定,以下是幾個(gè)根本點(diǎn):使用可以準(zhǔn)確說明變量/字段/類的完整的英文描述符例如,采用類似firstName,grandTotal或CorporateCustomer這樣的名字。雖然象x1,y1或fn這樣的名字很簡(jiǎn)短,輸入起來容易,但是我們難以知道它們代表什么、結(jié)果是什么含義,因而使代碼難以理解、維護(hù)和改良。采用該領(lǐng)域的術(shù)語(yǔ)如果用戶稱他們的“客戶”(clients)為“顧客”(customers),那么就采用術(shù)語(yǔ)Customer來命名這個(gè)類,而不用Client。許多程序開發(fā)者會(huì)犯的一個(gè)錯(cuò)誤是,不去使用工業(yè)或領(lǐng)域里已經(jīng)存在著很完美的術(shù)語(yǔ)時(shí),卻生造出一些普通詞匯。采用大小寫混合,提高名字的可讀性一般應(yīng)該采用小寫字母,但是類和接口的名字的首字母,以及任何中間單詞的首字母應(yīng)該大寫。盡量少用縮寫,但如果一定要使用,就要謹(jǐn)慎地使用這意味著應(yīng)該保存一個(gè)標(biāo)準(zhǔn)縮寫的列表,明智地從中選取,并且在使用時(shí)保持一致。例如,想對(duì)單詞“number”采用縮寫,那么可從nbr,no或者num中選取一個(gè),說明一下采用了哪一個(gè)〔具體是哪個(gè)倒無(wú)所謂〕,并且只使用這一種形式。防止使用長(zhǎng)名稱〔不超過15個(gè)字母〕例如:PhysicalOrVirtualProductOrService看起來似乎是個(gè)不錯(cuò)的類名,但是名字太長(zhǎng),應(yīng)該考慮重新給它起個(gè)短一點(diǎn)的名字,比方象Offering。防止使用相似或者僅在大小寫上有區(qū)別的名字例如,不應(yīng)同時(shí)使用變量名persistentObject和persistentObjects及anSqlDatabase和anSQLDatabase這樣的名稱防止使用下劃線作為名字的首末字母以下劃線為首末字母的名字通常為系統(tǒng)保存,除預(yù)處理定義之外,一般不用作用戶命名。更重要的是,下劃線經(jīng)常造成麻煩而且難輸入,所以盡量防止使用。包名,類名,方法名,屬性名,常量名命名約定包命名包命名全部使用小寫英文字母,中間不允許有數(shù)字下劃線等特殊字符。類,接口命名類,接口名開頭使用大寫英文字母,多單詞使用駝峰命名法。類名中不要使用下劃線和數(shù)字等特殊字符,正確的寫法例如:HibernateDaoSupport。如果表示特殊功能的類,在類名的末尾加上所要表示的功能英文名稱,如:****Listener,表示監(jiān)聽器等。方法命名方法命名使用駝峰命名法,方法名中間不要使用下劃線和數(shù)字等特殊字符,正確的例如:processing()。方法的參數(shù)以及方法內(nèi)部的局部參數(shù)可自定,符合要求就行。特殊Bean類的屬性命名約定Bean的屬性命名規(guī)那么嚴(yán)格使用駝峰命名法,不允許使用下劃線,名字長(zhǎng)度最長(zhǎng)不要超過15個(gè)字符,確實(shí)需要長(zhǎng)名字時(shí),適當(dāng)縮寫局部英文字母。常量屬性命名常量的命名規(guī)那么一般為常量名全部采用大寫字母,多單詞之間使用下劃線隔開,不允許使用數(shù)字等特殊字符,并且常量的聲明一定要是staticfinal的。普通類的屬性命名普通類的屬性命名除常量依照常量命名法外,其他的屬性的名字使用“英文名字〔首字母大寫〕”命名,多單詞可使用駝峰命名法或用下劃線隔開。注釋約定本文還會(huì)對(duì)注釋進(jìn)行約定,相關(guān)注釋風(fēng)格可以在eclipse中導(dǎo)入codetemplates.xm文件。以下是幾個(gè)根本點(diǎn):注釋應(yīng)該增加代碼的清晰度代碼注釋的目的是要使代碼更易于被同時(shí)參與程序設(shè)計(jì)的開發(fā)人員以及其他后繼開發(fā)人員理解。如果你的程序不值得注釋,那么它也很可能也不值得運(yùn)行。保持注釋的簡(jiǎn)潔最好的注釋應(yīng)該是簡(jiǎn)單明了的注釋。注釋不必洋洋灑灑,只需提供足夠的信息,使別人能夠理解你的代碼。先寫注釋,后寫代碼寫代碼注釋的最好方法是在寫代碼之前就寫注釋。這使你在寫代碼之前可以想想代碼的功能和運(yùn)行。而且這樣確保不會(huì)遺漏注釋。另一種方法是邊寫代碼邊寫注釋。因?yàn)樽⑨尶梢允勾a更易理解,所以在程序開發(fā)的過程中,也可以利用這一點(diǎn)。如果打算花些時(shí)間寫注釋,那么至少你應(yīng)從這個(gè)過程中獲得些什么。注釋信息不僅要包括代碼的功能,還應(yīng)給出原因例如,下面例1中的代碼顯示金額在$1,000以上〔包括$1,000〕的定單可給予5%的折扣。為什么要這樣做呢?難道有一個(gè)商業(yè)法那么規(guī)定大額定單可以得到折扣嗎?這種給大額定單的特殊是有時(shí)限的呢,還是一直都這樣?最初的程序設(shè)計(jì)者是否只是由于慷慨大度才這樣做呢?除非它們?cè)谀硞€(gè)地方〔或者是在源代碼本身,或者是在一個(gè)外部文檔里〕被注釋出來,否那么你不可能知道這些??焖贋g覽JavaDocSun公司的JavaDevelopmentKit(JDK)中有一個(gè)名為javadoc的程序。它可以處理Java的源代碼文件,并且為Java程序產(chǎn)生HTML文件形式的外部注釋文檔。Javadoc支持一定數(shù)目的標(biāo)記,標(biāo)識(shí)注釋文檔中各段起始位置的保存字。詳情請(qǐng)參考JDKjavadoc文檔。標(biāo)記用于目的@authorname類、接口說明特定某一段程序代碼的作者。每一個(gè)作者各有一個(gè)標(biāo)記。@deprecated類、成員函數(shù)。說明該類的應(yīng)用程序編程接口(API)已被廢棄,因此應(yīng)不再使用。@exceptionnamedescription成員函數(shù)說明由成員函數(shù)發(fā)出的異常。一個(gè)異常采用一個(gè)標(biāo)記,并要給出異常的完整類名。@paramnamedescription成員函數(shù)用來說明傳遞給一個(gè)成員函數(shù)的參數(shù),其中包括參數(shù)的類型/類和用法。每個(gè)參數(shù)各有一個(gè)標(biāo)記。@returndescription成員函數(shù)假設(shè)成員函數(shù)有返回值,對(duì)該返回值進(jìn)行說明。應(yīng)說明返回值的類型/類和可能的用途。@since類、成員函數(shù)說明自從有JDK1.1以來,該項(xiàng)已存在了多長(zhǎng)時(shí)間。@seeClassName類、接口、成員函數(shù)、字段在文檔中生成指向特定類的超文本鏈接??梢圆⑶覒?yīng)該采用完全合法的類名。@seeClassName#memberfunctionName類、接口、成員函數(shù)、字段在文檔中生成指向特定成員函數(shù)的超文本鏈接??梢圆⑶覒?yīng)該采用完全合法的類名。@versiontext類、接口說明特定一段代碼的版本信息。你注釋代碼的方式很大地影響著你的工作效率以及所有維護(hù)改良代碼的后繼開發(fā)者的工作效率。在軟件開發(fā)過程中及早注釋代碼,會(huì)促使你在開始撰寫代碼之前仔細(xì)考慮這些代碼,從而帶來更高的工作效率。而且,當(dāng)你重新閱讀數(shù)天前或者數(shù)星期前所寫的代碼時(shí),你可以很容易地判斷出當(dāng)時(shí)你是怎么想的,因?yàn)檫@一切都有記錄。開發(fā)標(biāo)準(zhǔn)工程結(jié)構(gòu)說明數(shù)據(jù)中心FDC工程采用多module式工程結(jié)構(gòu),其中包含如下工程,各工程模塊功能說明如下:父模塊模塊依賴模塊主要業(yè)務(wù)功能描述FDCFdc-commonnone提供FDC工程中公用框架包及公用工具包FDCFdc-monitorFdc-common提供FDC工程中監(jiān)控告警功能FDCFdc-computeFdc-monitor,Fdc-common提供FDC工程中核心數(shù)據(jù)運(yùn)算功能〔包括ETL,匯總,分發(fā)〕。FDCFdc-reportFdc-monitor,Fdc-common提供FDC項(xiàng)目中數(shù)據(jù)展現(xiàn)功能〔報(bào)表展現(xiàn),短信、郵件展現(xiàn),數(shù)據(jù)導(dǎo)出等〕整體包結(jié)構(gòu)說包結(jié)構(gòu)整體遵循按功能不同分包,主要表達(dá)出平臺(tái)的整體架構(gòu)。常用的包結(jié)構(gòu)如HYPERLINK常用包結(jié)構(gòu)及命名。各個(gè)模塊包結(jié)構(gòu),如業(yè)務(wù)層,控制層,持久層,異常,模型POJO,常量類,工具類等。這里的常用類和公共里的不一樣如果各大模塊在公共類里沒有找到,可以在自己的模塊中自行擴(kuò)展。到達(dá)遵循“開—閉”原那么。常用xml配置文件結(jié)構(gòu),如HYPERLINK配置文件包結(jié)構(gòu)。平臺(tái)核心的配置文件,存放在包的根目錄,如國(guó)際化,數(shù)據(jù)庫(kù)連接,日志配置,緩存配置,系統(tǒng)級(jí)配置等。自定義xml的scheme,dtd,以及tld文件存放于Web根目錄的WEB-INF文件夾下,文件名全部使用小寫字母。工程模塊包結(jié)構(gòu)及命名Fdc-common.cache說明:所有的緩存結(jié)構(gòu)。例如平臺(tái)所使用的Oscache和Ehcache緩存技術(shù)。.framework說明:各個(gè)技術(shù)層框架類。如下子包 controller:控制層提供的共有框架類。 Module:數(shù)據(jù)bean公共根底類。 Business:業(yè)務(wù)層公共業(yè)務(wù)控制類,提供通用功能。 Persistence:數(shù)據(jù)持久層公共數(shù)據(jù)操作類。.utils說明:存放根本常用的類。例如文件類,字符串類等。Fdc-moniter,Fdc-compute,Fdc-reportconfigs說明:該包存放所有關(guān)于讀取配置信息的類Controller說明:存放在控制層下面的業(yè)務(wù)類。例如登陸,登出,角色切換等。Module說明:存放各個(gè)業(yè)務(wù)數(shù)據(jù)bean類。下分各個(gè)子業(yè)務(wù)包。Busines說明:存放個(gè)業(yè)務(wù)層公共業(yè)務(wù)控制類。下分各個(gè)子業(yè)務(wù)包。Persistence說明:數(shù)據(jù)持久層數(shù)據(jù)控制類。下分各個(gè)子業(yè)務(wù)包。extends說明:平臺(tái)擴(kuò)展功能類。下分子包,第一級(jí)子包名表示擴(kuò)展功能模塊名。Exceptions各子工程模塊功能包結(jié)構(gòu)按照各個(gè)層次結(jié)構(gòu)包分完:功能包根本分為2個(gè)包:各個(gè)層次的接口包。對(duì)于接口的實(shí)現(xiàn)包。配置文件包結(jié)構(gòu)配置文件夾命名為configs,可存放在Web根目錄下的WEB-INF文件夾下,也可放在與javaclass文件根目錄同級(jí)的目錄下。configs目錄下主要包含以下目錄結(jié)構(gòu):commons存放公共的Xml配置文件,如:struts,spring,mybatis等的xml配置文件。core/*存放平臺(tái)核心模塊,各功能模塊,擴(kuò)展功能模塊的所需的配置文件。如各模塊的spring,struts,mybatis配置文件。命名規(guī)那么共用類公共用類要求以“功能英文名稱(首字母大寫)+Utils”駝峰命名。例如:日期的英文名為date,按照規(guī)那么要求,命名為:DateUtils。業(yè)務(wù)層業(yè)務(wù)層接口要求以I+“模塊英文名稱(首字母大寫)”+Manager命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:INavigatorManager;接口的實(shí)現(xiàn)類要求以“模塊英文名稱(首字母大寫)”+ManagerImpl命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:NavigatorManagerImpl;展現(xiàn)層基類要求以“模塊英文名稱(首字母大寫)”+ActionBase命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:NavigatorActionBase;查詢模塊列表類要求以List+“模塊英文名稱(首字母大寫)”+s+Action命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:ListNavigatorsAction;創(chuàng)立模塊對(duì)象類要求以Create+“模塊英文名稱(首字母大寫)”+Action命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:CreateNavigatorAction;修改模塊對(duì)象類要求以Modify+“模塊英文名稱(首字母大寫)”+Action命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:ModifyNavigatorAction;刪除模塊對(duì)象類要求以Remove+“模塊英文名稱(首字母大寫)”+Action命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:RemoveNavigatorAction;對(duì)模塊對(duì)象的操作類要求以“模塊英文名稱(首字母大寫)”+Operator+Action命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:NavigatorOperatorAction。模型層模型層存放的是實(shí)體類,要求以“模塊實(shí)體英文名稱(首字母大寫)”命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:Navigator;屬性字段參照Bean屬性命名規(guī)那么。持久層dao接口要求以I+“模塊英文名稱(首字母大寫)”+DAO命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:INavigatorDAO;接口的實(shí)現(xiàn)類要求以“模塊英文名稱(首字母大寫)”+DAOImpl命名。例如:導(dǎo)航菜單的英文名為navigator,按照規(guī)那么要求,命名為:NavigatorDAOImpl。XML配置主要配置文件包括spring.xml,struts.xml,mybatis.xml等。由于這些文件都是分包存放,所以配置文件統(tǒng)一為spring.xml,struts.xml,mybatis.xml。如果模塊內(nèi)的spring,struts,mybatis配置較多時(shí),需要分文件來寫,那么可直接在spring,struts,mybatis的后面直接加連接號(hào)“-”+名字來命名。如spring-common.xml。各模塊的mybatissqlmap配置文件放到相應(yīng)模塊的Model包下,一個(gè)域模型對(duì)應(yīng)一個(gè)sqlMap配置文件,如域模型名為Item,那么與域模型相對(duì)應(yīng)的sqlMap文件名為Item.xml。spring.xml平臺(tái)Spring相關(guān)組件配置。Module需要新建一個(gè)用戶管理模塊managerUserModule,設(shè)置其父節(jié)點(diǎn)是后臺(tái)管理樹的根節(jié)點(diǎn),也就是設(shè)置parentModeulId為#號(hào),然后它的子節(jié)點(diǎn)可以設(shè)置相應(yīng)的父節(jié)點(diǎn)為managerUserModule,。ationURL:指用來訪問這個(gè)相關(guān)模塊的命名空間。viewType:查看類型,是指要說明此模塊節(jié)點(diǎn)是要在前臺(tái)顯示還是后臺(tái)管理的。imgURL:指當(dāng)我們把這些模塊展示在相關(guān)樹上顯示的圖標(biāo)鏈接。Fuction確定包含的功能,如增加用戶:addUser。Method增加用戶的入口方法:saveAddUser。actionUR:指這個(gè)入口方法在當(dāng)前模塊命名空間下的訪問地址createUser.加一個(gè)點(diǎn)是用來判斷最后的后綴,如果是點(diǎn)結(jié)尾程序會(huì)自動(dòng)補(bǔ)齊訪問鏈接的后綴,如果是其他后綴直接訪問這個(gè)鏈接。isDefault:是否默認(rèn)入口,一個(gè)模塊功能只能有一個(gè)方法作為默認(rèn)入口。struts.xml平臺(tái)struts組件相關(guān)配置,開發(fā)相關(guān)模塊的時(shí)候注意相關(guān)標(biāo)準(zhǔn)package:我們可以在模塊中定義包以防止命名空間重復(fù),命名規(guī)那么:struts-xxx(模塊名層)。namespace:相關(guān)模塊的命名空間。這里涉及幾個(gè)需要注意的地方:這個(gè)鏈接會(huì)和權(quán)限關(guān)聯(lián)由過濾器判斷命名空間管理權(quán)限功能。但凡命名空間在/public/common這個(gè)路徑下的系統(tǒng)定義為前臺(tái)沒有權(quán)限管理的訪問鏈接,但凡命名空間在/manage/common這個(gè)路徑下的系統(tǒng)定義為后臺(tái)沒有權(quán)限管理的訪問鏈接。在這個(gè)兩個(gè)路徑下面訪問的地址,過濾器不作權(quán)限判斷。其它訪問地址會(huì)根據(jù)rights中配置定義的權(quán)限進(jìn)行過濾。extends:在struts配置中需要考慮各種攔截器和錯(cuò)誤處理跳轉(zhuǎn),配置在struts-interceptor.xml這個(gè)文件。Actionname:定義action被訪問的id命名標(biāo)準(zhǔn)與定義java變量同樣的標(biāo)準(zhǔn)。class:就是我們?cè)趕pring.xml文件已經(jīng)配置了注入actionspringbean的id。result:struts處理跳轉(zhuǎn),兩種跳轉(zhuǎn)方式dispatcher轉(zhuǎn)向和redirect重定向。interceptor-ref:所使用的攔截器。在struts-interceptor.xml這個(gè)文件有相關(guān)注釋。mybatis.xml,平臺(tái)myBATIS相關(guān)組件配置配置sqlMap元素的resource屬性,指示域模型對(duì)應(yīng)的SQL配置文件的包全路徑。myBATIS的SQLMap文件配置域模型的增刪改查SQL語(yǔ)句,存儲(chǔ)過程等;配置文件名與域模型同名。sqlMap根元素的namespace屬性,設(shè)置成域模型的本身的名字。如域模型名字為Item.java,那么namespace屬性名就為Item。typeAlias,resultMap,cacheModel,select,insert,delete,update等元素的id屬性名以“自定英文名字〔首字母小寫〕”命名,多單詞使用駝峰命名法。在使用select,insert,update,delete元素配置增刪改查時(shí),id屬性的名字規(guī)那么為,select的id屬性名以get***開頭,insert的以add***開頭,update的以u(píng)pdate***開頭,delete的以delete***開頭,配合事務(wù)中的配置,多單詞使用駝峰命名法??稍谶@些元素中使用復(fù)合查詢配置。procedure元素,的id屬性名以“功能英文名〔首字母小寫〕+Procedure”命名,使用駝峰命名法。sql元素的id屬性名以“自定義英文名字〔首字母小寫〕”命名。多個(gè)單詞可使用下劃線或使用駝峰命名法。statement元素的id屬性名與sql元素命名規(guī)那么一致。statement主要配置復(fù)合查詢。ehcache.xml平臺(tái)ehcache緩存實(shí)現(xiàn)配置文件system-config.xml平臺(tái)系統(tǒng)配置文件資源文件平臺(tái)properties以及國(guó)際化資源配置文件perties公共日志配置文件。perties平臺(tái)數(shù)據(jù)連接,根本參數(shù)配置等。perties平臺(tái)日志輸出保存等相關(guān)設(shè)置的配置文件。perties平臺(tái)調(diào)度組件相關(guān)設(shè)置的配置文件。perties平臺(tái)oscache緩存實(shí)現(xiàn)配置文件perties平臺(tái)struts組件相關(guān)系統(tǒng)配置文件〔國(guó)際化、上傳等〕。國(guó)際化資源文件使用標(biāo)準(zhǔn)JSTL標(biāo)簽綁定。通過不同的local讀取不同語(yǔ)言的相關(guān)資源,國(guó)際化資源文件中key的定義規(guī)那么:模塊名稱.功能名稱.key描述,但此全部小寫,多個(gè)單詞之間用下劃線分割。國(guó)際化資源配置文件進(jìn)行分割處理,屬于本功能模塊的國(guó)際化資源文件放到本模塊的根包下,在JSP中使用JSTL標(biāo)簽的<fmt:messagebundle=””/>調(diào)用,在文件開頭處加上<fmt:setBundlebasename=””/>設(shè)置。全局國(guó)際化配置文件如下〔直接設(shè)置在perties文件中〕:messages開頭的資源文件包含相關(guān)的國(guó)際化資源內(nèi)容。exceptionMessages開頭的資源文件包含異常處理描述的國(guó)際化資源內(nèi)容。各功能模塊的國(guó)際化配置文件使用如下:文件名使用“功能模塊名+”_”+messages”命名,如search_perties。在JSP文件最開頭處使用標(biāo)簽<fmt:setBundlebasename=””/>設(shè)置全局bundle,其中basename屬性名為模塊資源文件所在的包全路徑,scope為使用范圍。在位于setBundle設(shè)置后使用<fmt:messagekey=””>標(biāo)簽可直接使用該資源文件中的key屬性。JSP文件JSP文件統(tǒng)一存放在應(yīng)用的Web根目錄下,即與WEB-INF文件夾同級(jí)。文件夾名按照java對(duì)于的功能模塊名來設(shè)置,文件夾名全部使用小寫字母。JSP文件名以“自定英文名〔首字母小寫〕+“_”+功能名”命名,多單詞英文可使用駝峰命名法。事務(wù)命名約束平臺(tái)中,所有關(guān)于事務(wù)處理的,必須遵循以下命名規(guī)那么:保存/填加:以save開頭。修改:以u(píng)pdate開頭。刪除:以delete開頭。獲?。阂詆et開頭。查找:以find開頭。JS命名約束與Java命名一致,但JS文件名可小寫,甚至可以加下劃線等特殊符號(hào)。數(shù)據(jù)庫(kù)技術(shù)標(biāo)準(zhǔn)概述本標(biāo)準(zhǔn)目前只適合局部數(shù)據(jù)庫(kù)的相關(guān)定義。命名根本規(guī)那么針對(duì)不同工程模塊采用不同的數(shù)據(jù)命名。開發(fā)時(shí)數(shù)據(jù)庫(kù):dev+系統(tǒng)名。如:devcompute。試運(yùn)行數(shù)據(jù)庫(kù):test+系統(tǒng)名。如:testcompute。正式運(yùn)行數(shù)據(jù)庫(kù):系統(tǒng)名。如:compute。數(shù)據(jù)庫(kù)表空間命名根本規(guī)那么表空間:tbs_+系統(tǒng)名。如:tbs_compute。臨時(shí)表空間:tbs_+系統(tǒng)名+tempspace。如:tbs_computetempspace。默認(rèn)用戶方案Username:raysdata/rootPassword:raysdata/root表的命名規(guī)那么、約定命名根本規(guī)那么按照表在當(dāng)前數(shù)據(jù)倉(cāng)庫(kù)內(nèi)不同數(shù)據(jù)職能劃分,所有字母均大寫:字典定義類表以D_開頭;如:D_DIM。關(guān)系定義類表以P_開頭,當(dāng)前表示關(guān)系類名稱中間以“_”分割,表示兩者關(guān)系;如:P_ITEM_IDT。數(shù)據(jù)匯總類表以G_開頭,擁有數(shù)據(jù)維度的,將維度名稱采用”_”分割,拼合在表名稱中;如:G_ITEM_VSN對(duì)前端報(bào)表支持表以R_開頭,名稱采用各報(bào)表業(yè)務(wù)名稱定義,如:R_CONFIG_LOG視圖的命名規(guī)那么、約定命名根本規(guī)那么vi_視圖的類型〔模塊名〕_英文單詞_英文單詞_...例如:vi_base_message。字段命名規(guī)那么、約定命名根本規(guī)那么英文單詞_英文單詞_英文單詞_...例如:message_id、message_name。存儲(chǔ)過程的命名規(guī)那么、約定命名根本規(guī)那么usp_英文單詞_英文單詞_...例如:usp_message序列對(duì)象的命名規(guī)那么、約定命名根本規(guī)那么seq_英文單詞_英文單詞_如:seq_base_message。觸發(fā)器命名規(guī)那么、約定命名根本規(guī)那么trigger_英文單詞_英文單詞_如:trigger_message。HIVE技術(shù)標(biāo)準(zhǔn)按照表在當(dāng)前數(shù)據(jù)倉(cāng)庫(kù)內(nèi)不同數(shù)據(jù)職能劃分,所有字母均大寫:字典定義類表以D_開頭;如:D_DIM。關(guān)系定義類表以P_開頭,當(dāng)前表示關(guān)系類名稱中間以“_”分割,表示兩者關(guān)系;如:P_ITEM_IDT。數(shù)據(jù)集成類表以FACT_開頭,使用相關(guān)業(yè)務(wù)定義名稱,如:FACT_數(shù)據(jù)匯總類表以G_開頭,擁有數(shù)據(jù)維度的,將維度名稱采用”_”分割,拼合在表名稱中;如:G_ITEM_VSN對(duì)前端報(bào)表支持表以R_開頭,名稱采用各報(bào)表業(yè)務(wù)名稱定義,如:R_CONFIG_LOG數(shù)據(jù)路徑數(shù)據(jù)路徑內(nèi)全部按照大寫定義路徑字符。HBase設(shè)計(jì)標(biāo)準(zhǔn)介紹了HBase應(yīng)用開發(fā)時(shí)建議遵循的設(shè)計(jì)標(biāo)準(zhǔn),主要是針對(duì)開發(fā)層面的。Hbase中與表結(jié)構(gòu)相關(guān)的邏輯模型涉及到以下幾個(gè)詞匯:命名空間、表、列族、列、行鍵、版本等,這些是構(gòu)建hbase表的所有元素。下文就依據(jù)這幾個(gè)關(guān)鍵詞匯,陳述下相關(guān)的標(biāo)準(zhǔn)。Namespace命名空間設(shè)計(jì)通俗地講,命名空間可視為表組〔與Oracle中的表空間類似〕,劃分依據(jù)不固定,可依據(jù)業(yè)務(wù)類型劃分,也可依據(jù)時(shí)間周期劃分。譬如,針對(duì)電力氣象方面的數(shù)據(jù)表,可以創(chuàng)立一個(gè)電力氣象的命名空間,取名為DLQX,將電力氣象相關(guān)的表都組織在此命名空間下面。引進(jìn)命名空間的好處就是方便對(duì)表進(jìn)行組織管理。HBase默認(rèn)的命名空間是default,默認(rèn)情況下,如果在創(chuàng)立表時(shí)沒有顯式地指定命名空間,那么表將創(chuàng)立在default命名空間下。如果表隸屬于某個(gè)非默認(rèn)的命名空間,那么在引用表〔譬如讀取表數(shù)據(jù)〕時(shí),就必須指定命名空間,否那么將出現(xiàn)類似“無(wú)法定位到表”的錯(cuò)誤,完整表名的格式為“命名空間名稱:表名稱”,譬如”DLQX:SYSTEM_USER”;如果是默認(rèn)的命名空間,那么完整表名也可以省略掉“default:”,直接拼寫表名SYSTEM_USER即可。命名空間與表的關(guān)系,可以用下列圖表示:命名空間與表之間是一對(duì)多的關(guān)系,即一個(gè)命名空間下面可以包含多個(gè)hbase表,但一個(gè)hbase表只能屬于一個(gè)命名空間。在創(chuàng)立表時(shí),如果沒有指定命名空間〔或者命名空間為空〕,那么系統(tǒng)會(huì)將此hbase表放置在默認(rèn)命名空間〔default〕下。另外,刪除命名空間之前,必須先刪除掉此命名空間下的所有hbase表,否那么將無(wú)法刪除此命名空間。1.2.Table表設(shè)計(jì)HBase有幾個(gè)高級(jí)特性,在你設(shè)計(jì)表時(shí)可以使用。這些特性不一定聯(lián)系到模式或行鍵設(shè)計(jì),但是它們定義了某些方面的表行為。理想HBase表Hbase作為列數(shù)據(jù)庫(kù),根據(jù)官方的說法,在性能和效率上更擅長(zhǎng)處理“高而瘦”的表,而非“矮而胖”的表。所謂“高而瘦”,是指表的列的數(shù)量較少,但是行的數(shù)量極大,從而使表展現(xiàn)出一種又高又瘦的形象。所謂“矮而胖”,是指表的列的數(shù)據(jù)居多,但是行的數(shù)量卻有限,給人一種又矮又胖的形象,雖然hbase表號(hào)稱可容納百萬(wàn)列,但是那也僅僅限于理論上的極限,在實(shí)際應(yīng)用中,請(qǐng)盡量構(gòu)建“高而瘦”的表,同時(shí)需要對(duì)列的數(shù)量進(jìn)行測(cè)試,以防止過度影響讀寫性能。預(yù)創(chuàng)立分區(qū)默認(rèn)情況下,在創(chuàng)立HBase表的時(shí)候會(huì)自動(dòng)創(chuàng)立一個(gè)region分區(qū),當(dāng)導(dǎo)入數(shù)據(jù)的時(shí)候,所有的HBase客戶端都向這一個(gè)region寫數(shù)據(jù),直到這個(gè)region足夠大了才進(jìn)行切分。一種可以加快批量寫入速度的方法是通過預(yù)先創(chuàng)立一些空的regions,這樣當(dāng)數(shù)據(jù)寫入HBase時(shí),會(huì)按照region分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負(fù)載均衡。列族數(shù)量不要在一張表里定義太多的columnfamily。目前Hbase并不能很好的處理超過2~3個(gè)columnfamily的表。因?yàn)槟硞€(gè)columnfamily在flush的時(shí)候,它鄰近的columnfamily也會(huì)因關(guān)聯(lián)效應(yīng)被觸發(fā)flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多的I/O。所以,根據(jù)官方的建議,一個(gè)HBase表中創(chuàng)立一個(gè)列族即可??膳渲玫臄?shù)據(jù)塊大小HFile數(shù)據(jù)塊大小可以在列族層次設(shè)置。這個(gè)數(shù)據(jù)塊不同于HDFS數(shù)據(jù)塊。其默認(rèn)值是65,536字節(jié),或64KB。數(shù)據(jù)塊索引存儲(chǔ)每個(gè)HFile數(shù)據(jù)塊的起始鍵。數(shù)據(jù)塊大小設(shè)置影響到數(shù)據(jù)塊索引的大小。數(shù)據(jù)塊越小,索引越大,從而占用更大內(nèi)存空間。同時(shí)因?yàn)榧虞d進(jìn)內(nèi)存的數(shù)據(jù)塊更小,隨機(jī)查找性能更好。但是如果你需要更好的序列掃描性能,那么一次能夠加載更多HFile數(shù)據(jù)進(jìn)入內(nèi)存那么更為合理,這意味著數(shù)據(jù)塊應(yīng)該設(shè)置為更大的值。相應(yīng)地索引變小,你將在隨機(jī)讀性能上付出代價(jià)。數(shù)據(jù)塊緩存把數(shù)據(jù)放進(jìn)讀緩存,但工作負(fù)載卻經(jīng)常不能從中獲得性能提升。例如,如果一張表或表里的列族只被順序化掃描訪問或者很少被訪問,你不會(huì)介意Get或Scan花費(fèi)時(shí)間是否有點(diǎn)兒長(zhǎng)。在這種情況下,你可以選擇關(guān)閉那些列族的緩存。如果你只是執(zhí)行很多順序化掃描,你會(huì)屢次倒騰緩存,并且可能會(huì)濫用緩存把應(yīng)該放進(jìn)緩存獲得性能提升的數(shù)據(jù)給排擠出去。如果關(guān)閉緩存,你不僅可以防止上述情況發(fā)生,而且可以讓出更多緩存給其他表和同一表的其他列族使用。激進(jìn)緩存你可以選擇一些列族,賦予它們?cè)跀?shù)據(jù)塊緩存里有更高的優(yōu)先級(jí)〔LRU緩存〕。如果你預(yù)期一個(gè)列族比另一個(gè)列族隨機(jī)讀更多,這個(gè)特性遲早用得上。IN_MEMORY參數(shù)的默認(rèn)值是false。因?yàn)镠Base除了在數(shù)據(jù)塊緩存里保存這個(gè)列族相比其他列族更激進(jìn)之外并不提供額外的保證,該參數(shù)在實(shí)踐中設(shè)置為true不會(huì)變化太大。創(chuàng)立表的時(shí)候,可以通過HColumnDescriptor.setInMemory(true)將表放到RegionServer的緩存中,保證在讀取的時(shí)候被cache命中。布隆過濾器〔Bloomfilters〕數(shù)據(jù)塊索引提供了一個(gè)有效的方法,在訪問一個(gè)特定的行時(shí)用來查找應(yīng)該讀取的HFile的數(shù)據(jù)塊。但是它的效用是有限的。HFile數(shù)據(jù)塊的默認(rèn)大小是64KB,這個(gè)大小不能調(diào)整太多。如果你要查找一個(gè)短行,只在整個(gè)數(shù)據(jù)塊的起始行鍵上建立索引無(wú)法給你細(xì)粒度的索引信息。例如,如果你的行占用100字節(jié)存儲(chǔ)空間,一個(gè)64KB的數(shù)據(jù)塊包含(64*1024)/100=655.53=~700行,而你只能把起始行放在索引位上。你要查找的行可能落在特定數(shù)據(jù)塊上的行區(qū)間里,但也不是肯定存放在那個(gè)數(shù)據(jù)塊上。這有多種情況的可能,或者該行在表里不存在,或者存放在另一個(gè)HFile里,甚至在MemStore里。這些情況下,從硬盤讀取數(shù)據(jù)塊會(huì)帶來IO開銷,也會(huì)濫用數(shù)據(jù)塊緩存。這會(huì)影響性能,尤其是當(dāng)你面對(duì)一個(gè)巨大的數(shù)據(jù)集并且有很多并發(fā)讀用戶時(shí)。布隆過濾器允許你對(duì)存儲(chǔ)在每個(gè)數(shù)據(jù)塊的數(shù)據(jù)做一個(gè)反向測(cè)試。當(dāng)某行被請(qǐng)求時(shí),先檢查布隆過濾器看看該行是否不在這個(gè)數(shù)據(jù)塊。布隆過濾器要么確定答復(fù)該行不在,要么答復(fù)它不知道。這就是為什么我們稱它是反向測(cè)試。布隆過濾器也可以應(yīng)用到行里的單元上。當(dāng)訪問某列標(biāo)識(shí)符時(shí)先使用同樣的反向測(cè)試。布隆過濾器也不是沒有代價(jià)。存儲(chǔ)這個(gè)額外的索引層次占用額外的空間。布隆過濾器隨著它們的索引對(duì)象數(shù)據(jù)增長(zhǎng)而增長(zhǎng),所以行級(jí)布隆過濾器比列標(biāo)識(shí)符級(jí)布隆過濾器占用空間要少。當(dāng)空間不是問題時(shí),它們可以幫助你榨干系統(tǒng)的性能潛力。你可以在列族上翻開布隆過濾器,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',BLOOMFILTER=>'ROWCOL'}BLOOMFILTER參數(shù)的默認(rèn)值是NONE。一個(gè)行級(jí)布隆過濾器用ROW翻開,列標(biāo)識(shí)符級(jí)布隆過濾器用ROWCOL翻開。行級(jí)布隆過濾器在數(shù)據(jù)塊里檢查特定行鍵是否不存在,列標(biāo)識(shí)符級(jí)布隆過濾器檢查行和列標(biāo)識(shí)符聯(lián)合體是否不存在。ROWCOL布隆過濾器的開銷高于ROW布隆過濾器。生存時(shí)間〔TTL〕應(yīng)用系統(tǒng)經(jīng)常需要從數(shù)據(jù)庫(kù)里刪除老數(shù)據(jù)。由于數(shù)據(jù)庫(kù)很難超過某種規(guī)模,所以傳統(tǒng)上數(shù)據(jù)庫(kù)內(nèi)建了許多靈活處理方法。例如,在TwitBase里你不愿意刪除用戶在使用應(yīng)用系統(tǒng)期間生成的任何推帖。這些都是用戶生成數(shù)據(jù),將來有一天當(dāng)你執(zhí)行一些高級(jí)分析時(shí)可能有用。但是并不需要保存所有推帖用于實(shí)時(shí)訪問。所以早于某個(gè)時(shí)間的推帖可以歸檔存放到平面文件里。HBase可以讓你在數(shù)秒內(nèi)在列族級(jí)別設(shè)置一個(gè)TTL。早于指定TTL值的數(shù)據(jù)在下一次大合并時(shí)會(huì)被刪除。如果你在同一單元上有多個(gè)時(shí)間版本,早于設(shè)定TTL的版本會(huì)被刪除。你可以關(guān)閉TTL或者通過設(shè)置其值為INT.MAX_VALUE(2147483647)來讓它永遠(yuǎn)翻開〔這是默認(rèn)值〕。你可以在建表時(shí)設(shè)置TTL,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',TTL=>'18000'}該命令在colfam1列族上設(shè)置TTL為18,000秒=5小時(shí)。colfam1里超過5小時(shí)的數(shù)據(jù)將會(huì)在下一次大合并時(shí)被刪除。數(shù)據(jù)壓縮HFile可以被壓縮并存放在HDFS上。這有助于節(jié)省硬盤IO,但是讀寫數(shù)據(jù)時(shí)壓縮和解壓縮會(huì)抬高CPU利用率。壓縮是表定義的一局部,可以在建表或模式改變時(shí)設(shè)定。除非你確定不會(huì)從壓縮中受益,我們推薦你翻開表的壓縮。只有在數(shù)據(jù)不能被壓縮或者因?yàn)槟撤N原因效勞器的CPU利用率有限制要求的情況下,有可能會(huì)關(guān)閉壓縮特性。HBase可以使用多種壓縮編碼,包括LZO、Snappy和GZIP。LZO[1]和Snappy[2]是其中最流行的兩種。Snappy由Google在2011年發(fā)布,發(fā)布不久Hadoop和HBase工程開始提供支持。在此之前,選擇的是LZO編碼。Hadoop使用的LZO原生庫(kù)受GPLv2版權(quán)控制,不能放在Hadoop和Hbase的任何發(fā)行版里;它們必須單獨(dú)安裝。另一方面,Snappy擁有BSD許可〔BSD-licensed〕,所以它更容易和Hadoop和HBase發(fā)行版捆綁在一起。LZO和Snappy的壓縮比例和壓縮/解壓縮速度差不多。當(dāng)建表時(shí)你可以在列族上翻開壓縮,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',COMPRESSION=>'SNAPPY'}注意數(shù)據(jù)只在硬盤上是壓縮的。在內(nèi)存里〔MemStore或BlockCache〕或網(wǎng)絡(luò)傳輸時(shí)是沒有壓縮的。改變壓縮編碼的做法不應(yīng)該經(jīng)常發(fā)生,但是如果你確實(shí)需要改變某個(gè)列族的壓縮編碼,直接做就可以。你需要更改表定義,設(shè)定新壓縮編碼。此后合并時(shí),生成的HFile全部會(huì)采用新編碼壓縮。這個(gè)過程不需要?jiǎng)?chuàng)立新表和復(fù)制數(shù)據(jù)。但你要確保直到改變編碼后所有老HFile被合并后才能從集群中刪除老編碼函數(shù)庫(kù)。數(shù)據(jù)分割在HBase中,數(shù)據(jù)在更新時(shí)首先寫入WAL日志(HLog)和內(nèi)存(MemStore)中,MemStore中的數(shù)據(jù)是排序的,當(dāng)MemStore累計(jì)到一定閾值時(shí),就會(huì)創(chuàng)立一個(gè)新的MemStore,并且將老的MemStore添加到flush隊(duì)列,由單獨(dú)的線程flush到磁盤上,成為一個(gè)StoreFile。于此同時(shí),系統(tǒng)會(huì)在zookeeper中記錄一個(gè)redopoint,表示這個(gè)時(shí)刻之前的變更已經(jīng)持久化了(minorcompact)。StoreFile是只讀的,一旦創(chuàng)立后就不可以再修改。因此Hbase的更新其實(shí)是不斷追加的操作。當(dāng)一個(gè)Store中的StoreFile到達(dá)一定的閾值后,就會(huì)進(jìn)行一次合并(majorcompact),將對(duì)同一個(gè)key的修改合并到一起,形成一個(gè)大的StoreFile,當(dāng)StoreFile的大小到達(dá)一定閾值后,又會(huì)對(duì)StoreFile進(jìn)行分割(split),等分為兩個(gè)StoreFile。由于對(duì)表的更新是不斷追加的,處理讀請(qǐng)求時(shí),需要訪問Store中全部的StoreFile和MemStore,將它們按照rowkey進(jìn)行合并,由于StoreFile和MemStore都是經(jīng)過排序的,并且StoreFile帶有內(nèi)存中索引,通常合并過程還是比擬快的。實(shí)際應(yīng)用中,可以考慮必要時(shí)手動(dòng)進(jìn)行majorcompact,將同一個(gè)rowkey的修改良行合并形成一個(gè)大的StoreFile。同時(shí),可以將StoreFile設(shè)置大些,減少split的發(fā)生。單元時(shí)間版本HBase在默認(rèn)情況下每個(gè)單元維護(hù)三個(gè)時(shí)間版本。這個(gè)屬性是可以設(shè)置的。如果你只需要一個(gè)版本,推薦你在設(shè)置表時(shí)只維護(hù)一個(gè)版本。這樣系統(tǒng)就不會(huì)保存更新單元的多個(gè)時(shí)間版本。時(shí)間版本也是在列族級(jí)設(shè)置的,可以在表實(shí)例化時(shí)設(shè)定:hbase(main)>create'mytable',{NAME=>'colfam1',VERSIONS=>1}你可以在同一個(gè)create語(yǔ)句里為列族指定多個(gè)屬性,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',VERSIONS=>1,TTL=>'18000'}你也可以指定列族存儲(chǔ)的最少

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論