《2022年数据中心产品开发规范.doc》由会员分享,可在线阅读,更多相关《2022年数据中心产品开发规范.doc(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据中心产品开发标准XXXX公司XX业务部XXXX年XX月文档说明本文档所涉及到的文字、图表等,仅限于内部使用,未经双方书面许可,请勿扩散到第三方。文档属性属性内容客户名称:工程名称:文档主题:文档编号:文档版本:版本日期:文档状态:文档变更版本修订日期修订人描绘文档送呈单位姓名目的批阅参阅目 录1概述51.1最根本原则52Java技术标准62.1平台使用的相关技术62.1.1根本核心框架包62.1.2其他框架包62.2程序设计标准72.2.1命名商定82.2.2包名,类名,方法名,属性名,常量名命名商定92.2.3注释商定102.2.4快速阅读JavaDoc112.3开发标准122.3.1工
2、程构造说明122.3.2整体包构造说122.3.3工程模块包构造及命名132.3.4各子工程模块功能包构造142.3.5配置文件包构造142.4命名规则152.4.1共用类152.4.2业务层152.4.3展现层152.4.4模型层162.4.5持久层162.4.6XML配置162.4.7资源文件192.4.8JSP文件202.4.9事务命名约束202.4.10JS命名约束213数据库技术标准223.1概述223.2命名根本规则223.3数据库表空间223.3.1命名根本规则223.4默认用户方案223.5表的命名规则、商定223.6视图的命名规则、商定233.7字段命名规则、商定233.8存
3、储过程的命名规则、商定233.9序列对象的命名规则、商定243.10触发器命名规则、商定244HIVE技术标准255HBase设计标准265.1Namespace命名空间设计265.21.2. Table表设计275.2.1理想HBase表275.2.2预创立分区285.2.3列族数量285.2.4可配置的数据块大小295.2.5数据块缓存295.2.6激进缓存295.2.7布隆过滤器(Bloom filters)305.2.8生存时间(TTL)315.2.9数据压缩325.2.10数据分割335.2.11单元时间版本345.3ColumnFamily列族设计355.4Qualifier列设计
4、365.5版本设计375.6HBase命名标准371 概述本文提供一整套编写高效可靠的Java代码的标准、商定和指南。它们以平安可靠的软件工程原则为根底,使代码易于理解、维护和加强。而且,通过遵照这些程序设计标准,你作为一个Java软件开发者的消费效率会有明显提高。经历证明,假设从一开场就花时间编写高质量的代码,则在软件开发阶段,对代码的修正要容易非常多。最后,遵照一套通用的程序设计标准将带来更大的一致性,使软件开发团队的效率明显提高。1.1 最根本原则r 运用常识当找不到任何规则或指导方针,当规则明显不能适用,当所有的方法都失效的时侯: 运用常识并核实这些根本原则。这条规则比其它所有规则都重
5、要。r 驼峰命名法驼峰命名法(Camel-Case):确实是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开场;第二个单字的首字母大写或每一个单字的首字母都采纳大写字母,例如:myFirstName、myLastName,如此的变量名看上去就像骆驼峰一样此起彼伏,故得名。驼峰命名法的命名规则可视为一种惯例,并无绝对与强迫,目的是增加识别和可读性。2 Java技术标准2.1 平台使用的相关技术平台使用的框架包分核心框架包和其他必须的框架包,各框架包本身所依赖的开源包不做列举,由框架包本身的信息来定。2.1.1 根本核心框架包平台采纳Spring+Stru
6、ts2+myBatis的三层架构作为根本框架。(JDK1.6+)。参考如下:名称版本备注Struts22.2.1Spring3.0.5mybatis-core3.1.1不支持跨数据库建议,目前开发在mysql上,现网环境在db2上mybatis-spring1.1.1MySQL5.0Tomcat7.0jQuery1.82.1.2 其他框架包除根本框架外,平台其他将采纳的一些框架包,参考如下:(JDK1.5+)名称版本备注Spring Security2.0.4Apache Commons2.6常用的工具包等SLF4J1.6.1Apache Logging log4j1.2.15Apache A
7、nt1.7.1Oscache2.4.1XMemcache1.2.5C3P00.9.1Dom4j2.0commons-beanutils1.8.3Mybatis-spring1.1.1Hadoop-core0.20.2-cdh3u5Hive-cli0.7.1-cdh3u5Hbase0.90.6-cdh3u52.2 程序设计标准Java的程序设计标准非常重要,缘故在于它将提高开发团队各成员的代码的一致性。一致性的提高会使代码更易理解,这意味着它更易开发和维护。从而降低了应用程序的总开发本钱。你必须牢记的是:你的Java代码在你已离开并开场另一个工程之后,会保存相当长的一段时间。因而开发过程中一个非
8、常重要的目的确实是要确保在开发成员或开发团队之间的工作能够顺利交接,不必花非常大的力气便能理解已编写的代码,以便接着维护和改良往常的工作。假如代码难以理解,非常有可能被废弃和重写。s2.2.1 命名商定我们将在整个标准中讨论命名商定,以下是几个根本点:r 使用能够精确说明变量/字段/类的完好的英文描绘符例如,采纳类似firstName,grandTotal 或 CorporateCustomer如此的名字。尽管象x1,y1或fn 如此的名字非常简短,输入起来容易,但是我们难以明白它们代表什么、结果是什么含义,因而使代码难以理解、维护和改良。r 采纳该领域的术语假如用户称他们的“客户” (cli
9、ents) 为“顾客” (customers),那么就采纳术语Customer 来命名这个类,而不用 Client。许多程序开发者会犯的一个错误是,不去使用工业或领域里已经存在着非常完满的术语时,却生造出一些一般词汇。r 采纳大小写混合,提高名字的可读性一般应该采纳小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。r 尽量少用缩写,但假如一定要使用,就要慎重地使用这意味着应该保存一个标准缩写的列表,明智地从中选取,同时在使用时保持一致。例如,想对单词“number”采纳缩写,那么可从 nbr,no 或者 num 中选取一个,说明一下采纳了哪一个(详细是哪个倒无所谓),同时
10、只使用这一种方式。r 防止使用长名称(不超过15 个字母)例如: PhysicalOrVirtualProductOrService 看起来大概是个不错的类名,但是名字太长,应该考虑重新给它起个短一点的名字,比方象 Offering。 r 防止使用类似或者仅在大小写上有区别的名字例如,不应同时使用变量名 persistentObject和persistentObjects及anSqlDatabase和 anSQLDatabase如此的名称r 防止使用下划线作为名字的首末字母以下划线为首末字母的名字通常为系统保存,除预处理定义之外,一般不用作用户命名。更重要的是,下划线经常造成烦恼而且难输入,因
11、而尽量防止使用。2.2.2 包名,类名,方法名,属性名,常量名命名商定r 包命名包命名全部使用小写英文字母,中间不同意有数字下划线等特别字符。r 类,接口命名类,接口名开头使用大写英文字母,多单词使用驼峰命名法。类名中不要使用下划线和数字等特别字符,正确的写法例如:HibernateDaoSupport。假如表示特别功能的类,在类名的末尾加上所要表示的功能英文名称,如:*Listener,表示监听器等。r 方法命名方法命名使用驼峰命名法,方法名中间不要使用下划线和数字等特别字符,正确的例如:processing()。方法的参数以及方法内部的部分参数可自定,符合要求就行。r 特别Bean类的属性
12、命名商定Bean的属性命名规则严格使用驼峰命名法,不同意使用下划线,名字长度最长不要超过15个字符,确实需要长名字时,适当缩写部分英文字母。r 常量属性命名常量的命名规则一般为常量名全部采纳大写字母,多单词之间使用下划线隔开,不同意使用数字等特别字符,同时常量的声明一定要是static final的。r 一般类的属性命名一般类的属性命名除常量按照常量命名法外,其他的属性的名字使用“英文名字(首字母大写)”命名,多单词可使用驼峰命名法或用下划线隔开。2.2.3 注释商定本文还会对注释进展商定,相关注释风格能够在eclipse中导入codetemplates.xm文件。以下是几个根本点: r 注释
13、应该增加代码的明晰度代码注释的目的是要使代码更易于被同时参与程序设计的开发人员以及其他后继开发人员理解。r 假如你的程序不值得注释,那么它也非常可能也不值得运转 。r 保持注释的简约最好的注释应该是简单明了的注释。注释不必洋洋洒洒,只需提供足够的信息,使别人能够理解你的代码。r 先写注释,后写代码写代码注释的最好方法是在写代码之前就写注释。这使你在写代码之前能够想想代码的功能和运转。而且如此确保不会遗漏注释。另一种方法是边写代码边写注释。由于注释能够使代码更易理解,因而在程序开发的过程中,也能够利用这一点。假如计划花些时间写注释,那么至少你应从这个过程中获得些什么。r 注释信息不仅要包括代码的
14、功能,还应给出缘故例如,下面例1中的代码显示金额在 $1,000 以上(包括 $1,000)的定单可给予 5% 的折扣。为什么要如此做呢?难道有一个商业法则规定大额定单能够得到折扣吗?这种给大额定单的特别是有时限的呢,依然不断都如此?最初的程序设计者是否只是由于大方大度才如此做呢?除非它们在某个地点(或者是在源代码本身,或者是在一个外部文档里)被注释出来,否则你不可能明白这些。2.2.4 快速阅读JavaDocSun 公司的 Java Development Kit (JDK) 中有一个名为 javadoc 的程序。它能够处理 Java 的源代码文件,同时为 Java 程序产生 HTML 文件
15、方式的外部注释文档。Javadoc 支持一定数目的标记,标识注释文档中各段起始位置的保存字。详情请参考 JDK javadoc 文档。标记用于目的author name类、接口说明特定某一段程序代码的作者。每一个作者各有一个标记。deprecated类、成员函数。说明该类的应用程序编程接口 (API) 已被废弃,因而应不再使用。exception name description成员函数说明由成员函数发出的异常。一个异常采纳一个标记,并要给出异常的完好类名。param name description成员函数用来说明传递给一个成员函数的参数,其中包括参数的类型/类和用法。每个参数各有一个标记。
16、return description成员函数假设成员函数有返回值,对该返回值进展说明。应说明返回值的类型/类和可能的用处。since类、成员函数说明自从有 JDK 1.1 以来,该项已存在了多长时间。see ClassName类、接口、成员函数、字段在文档中生成指向特定类的超文本链接。能够同时应该采纳完全合法的类名。see ClassName#member functionName类、接口、成员函数、字段在文档中生成指向特定成员函数的超文本链接。能够同时应该采纳完全合法的类名。version text类、接口说明特定一段代码的版本信息。你注释代码的方式非常大地妨碍着你的工作效率以及所有维护改良
17、代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使你在开场撰写代码之前细心考虑这些代码,从而带来更高的工作效率。而且,当你重新阅读数天前或者数星期前所写的代码时,你能够非常容易地推断出当时你是如何想的,由于这一切都有记录。2.3 开发标准2.3.1 工程构造说明数据中心 FDC工程采纳多module式工程构造,其中包含如下工程,各工程模块功能说明如下:父模块模块依赖模块主要业务功能描绘FDCFdc-commonnone提供FDC工程中公用框架包及公用工具包FDCFdc-monitorFdc-common提供FDC工程中监控告警功能FDCFdc-computeFdc-monitor
18、, Fdc-common提供FDC工程中核心数据运算功能(包括ETL,汇总,分发)。FDCFdc-reportFdc-monitor, Fdc-common提供FDC项 目中数据展现功能(报表展现,短信、邮件展现,数据导出等) 2.3.2 整体包构造说包构造整体遵照按功能不同分包,主要表达出平台的整体架构。1. 常用的包构造如2.3.2常用包构造及命名。2. 各个模块包构造,如业务层,操纵层,持久层,异常,模型POJO,常量类,工具类等。这里的常用类和公共里的不一样假如各大模块在公共类里没有找到,能够在本人的模块中自行扩展。到达遵照“开闭”原则。3. 常用xml配置文件构造,如2.3.4配置文
19、件包构造。4. 平台核心的配置文件,存放在包的根目录,如国际化,数据库连接,日志配置,缓存配置,系统级配置等。5. 自定义xml的scheme,dtd,以及tld文件存放于Web根目录的WEB-INF文件夹下,文件名全部使用小写字母。2.3.3 工程模块包构造及命名1. Fdc-commonr com.feinno.fdcmon.cache说明:所有的缓存构造。例如平台所使用的Oscache和Ehcache缓存技术。r com.feinno.fdcmon.framework 说明:各个技术层框架类。如下子包 controller:操纵层提供的共有框架类。Module:数据bean公共根底类。B
20、usiness:业务层公共业务操纵类,提供通用功能。Persistence:数据持久层公共数据操作类。r com.feinno.fdcmon.utils说明:存放根本常用的类。例如文件类,字符串类等。2. Fdc-moniter , Fdc-compute, Fdc-reportr configs说明:该包存放所有关于读取配置信息的类r Controller说明:存放在操纵层下面的业务类。例如登陆,登出,角色切换等。r Module说明:存放各个业务数据bean类。下分各个子业务包。r Busines说明:存放个业务层公共业务操纵类。下分各个子业务包。r Persistence说明:数据持久层
21、数据操纵类。下分各个子业务包。r extends说明:平台扩展功能类。下分子包,第一级子包名表示扩展功能模块名。r Exceptions2.3.4 各子工程模块功能包构造按照各个层次构造包分完:功能包根本分为2个包:1. 各个层次的接口包。2. 关于接口的实现包。2.3.5 配置文件包构造配置文件夹命名为configs,可存放在Web根目录下的WEB-INF文件夹下,也可放在与java class文件根目录同级的目录下。configs目录下主要包含以下目录构造:r commons存放公共的Xml配置文件,如:struts,spring,mybatis等的xml配置文件。r core/*存放平台
22、核心模块,各功能模块,扩展功能模块的所需的配置文件。如各模块的spring,struts,mybatis配置文件。2.4 命名规则2.4.1 共用类公共用类要求以“功能英文名称(首字母大写)+ Utils”驼峰命名。例如:日期的英文名为date,按照规则要求,命名为:DateUtils 。2.4.2 业务层q 业务层接口要求以 I +“模块英文名称(首字母大写)”+ Manager命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:INavigatorManager ;q 接口的实现类要求以“模块英文名称(首字母大写)”+ ManagerImpl 命名。例如:导航菜单的英文
23、名为navigator,按照规则要求,命名为:NavigatorManagerImpl ;2.4.3 展现层q 基类要求以“模块英文名称(首字母大写)”+ActionBase命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorActionBase ;q 查询模块列表类要求以List +“模块英文名称(首字母大写)”+ s + Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:ListNavigatorsAction ;q 创立模块对象类要求以Create +“模块英文名称(首字母大写)”+ Action命名。例如:导航菜单
24、的英文名为navigator,按照规则要求,命名为: CreateNavigatorAction ;q 修正模块对象类要求以Modify +“模块英文名称(首字母大写)”+ Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:ModifyNavigatorAction ;q 删除模块对象类要求以Remove +“模块英文名称(首字母大写)”+ Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:RemoveNavigatorAction ;q 对模块对象的操作类要求以“模块英文名称(首字母大写)”+ Operator + Acti
25、on命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为: NavigatorOperatorAction 。2.4.4 模型层q 模型层存放的是实体类,要求以“模块实体英文名称(首字母大写)”命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:Navigator ;q 属性字段参照Bean属性命名规则。2.4.5 持久层q dao接口要求以 I +“模块英文名称(首字母大写)”+ DAO命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:INavigatorDAO ;q 接口的实现类要求以“模块英文名称(首字母大写)”+ DAOImp
26、l 命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorDAOImpl 。2.4.6 XML配置主要配置文件包括spring.xml,struts.xml,mybatis.xml等。由于这些文件都是分包存放,因而配置文件统一为spring.xml,struts.xml,mybatis.xml。假如模块内的spring,struts,mybatis配置较多时,需要分文件来写,那么可直截了当在spring,struts,mybatis的后面直截了当加连接号“-”+名字来命名。如spring-common.xml。各模块的mybatis sqlmap配置文件放到
27、相应模块的Model包下,一个域模型对应一个sqlMap配置文件,如域模型名为Item,则与域模型相对应的sqlMap文件名为Item.xml。1、 spring.xml平台Spring相关组件配置。Moduleq 需要新建一个用户治理模块managerUserModule,设置其父节点是后台治理树的根节点,也确实是设置parentModeulId为#号,然后它的子节点能够设置相应的父节点为managerUserModule,。q ationURL:指用来访咨询这个相关模块的命名空间。q viewType:查看类型,是指要说明此模块节点是要在前台显示依然后台治理的。q imgURL:指当我们把
28、这些模块展示在相关树上显示的图标链接。Fuctionq 确定包含的功能,如增加用户:addUser。Methodq 增加用户的入口方法:saveAddUser。q actionUR:指这个入口方法在当前模块命名空间下的访咨询地址createUser.加一个点是用来推断最后的后缀,假如是点结尾程序会自动补齐访咨询链接的后缀,假如是其他后缀直截了当访咨询这个链接。q isDefault:是否默认入口,一个模块功能只能有一个方法作为默认入口。2、 struts.xml平台struts组件相关配置,开发相关模块的时候留意相关标准q package:我们能够在模块中定义包以防止命名空间重复,命名规则:
29、struts-xxx(模块名层)。q namespace:相关模块的命名空间。这里涉及几个需要留意的地点:这个链接会和权限关联由过滤器推断命名空间治理权限功能。但凡命名空间在/public/common这个途径下的系统定义为前台没有权限治理的访咨询链接,但凡命名空间在/manage/common这个途径下的系统定义为后台没有权限治理的访咨询链接。在这个两个途径下面访咨询的地址,过滤器不作权限推断。其它访咨询地址会依照rights中配置定义的权限进展过滤。q extends:在struts配置中需要考虑各种拦截器和错误处理跳转,配置在struts-interceptor.xml这个文件。Acti
30、onq name:定义action被访咨询的id命名标准与定义java变量同样的标准。q class:确实是我们在spring.xml文件已经配置了注入action spring bean的id。q result:struts处理跳转,两种跳转方式dispatcher转向和redirect重定向。q interceptor-ref:所使用的拦截器。在struts-interceptor.xml这个文件有相关注释。3、 mybatis.xml,平台myBATIS相关组件配置q 配置sqlMap元素的resource属性,指示域模型对应的SQL配置文件的包全途径。4、 myBATIS的SQLMap
31、文件配置域模型的增删改查SQL语句,存储过程等;配置文件名与域模型同名。q sqlMap根元素的namespace属性,设置成域模型的本身的名字。如域模型名字为Item.java,那么namespace属性名就为Item。q typeAlias,resultMap,cacheModel,select,insert,delete,update等元素的id属性名以“自定英文名字(首字母小写)”命名,多单词使用驼峰命名法。q 在使用select,insert,update,delete元素配置增删改查时,id属性的名字规则为,select的id属性名以get*开头,insert的以add*开头,up
32、date的以update*开头,delete的以delete*开头,配合事务中的配置,多单词使用驼峰命名法。可在这些元素中使用复合查询配置。q procedure元素,的id属性名以“功能英文名(首字母小写)+Procedure”命名,使用驼峰命名法。q sql元素的id属性名以“自定义英文名字(首字母小写)”命名。多个单词可使用下划线或使用驼峰命名法。q statement元素的id属性名与sql元素命名规则一致。statement主要配置复合查询。5、 ehcache.xml 平台ehcache缓存实现配置文件6、 system-config.xml 平台系统配置文件2.4.7 资源文件平
33、台properties以及国际化资源 配置文件q commons-logging.properties 公共日志配置文件。q config.properties 平台数据连接,根本参数配置等。q log4j.properties 平台日志输出保存等相关设置的配置文件。q quartz.properties 平台调度组件相关设置的配置文件。q oscache.properties 平台oscache缓存实现配置文件q struts.properties 平台struts组件相关系统配置文件(国际化、上传等)。国际化资源文件使用标准JSTL标签绑定。通过不同的local读取不同语言的相关资源,国际
34、化资源文件中key的定义规则:模块名称.功能名称.key描绘,但此全部小写,多个单词之间用下划线分割。国际化资源配置文件进展分割处理,属于本功能模块的国际化资源文件放到本模块的根包下,在JSP中使用JSTL标签的调用,在文件开头处加上设置。全局国际化配置文件如下(直截了当设置在struts.properties文件中):q messages开头的资源文件包含相关的国际化资源内容。q exceptionMessages开头的资源文件包含异常处理描绘的国际化资源内容。各功能模块的国际化配置文件使用如下:q 文件名使用“功能模块名+”_”+messages”命名,如search_message.pr
35、operties。q 在JSP文件最开头处使用标签设置全局bundle,其中basename属性名为模块资源文件所在的包全途径,scope为使用范围。q 在位于setBundle设置后使用标签可直截了当使用该资源文件中的key属性。2.4.8 JSP文件q JSP文件统一存放在应用的Web根目录下,即与WEB-INF文件夹同级。q 文件夹名按照java关于的功能模块名来设置,文件夹名全部使用小写字母。q JSP文件名以“自定英文名(首字母小写)+“_”+功能名”命名,多单词英文可使用驼峰命名法。2.4.9 事务命名约束平台中,所有关于事务处理的,必须遵照以下命名规则:q 保存/填加:以save
36、开头。q 修正:以update开头。q 删除:以delete开头。q 获取:以get开头。q 查找:以find开头。2.4.10 JS命名约束与Java命名一致,但JS文件名可小写,甚至能够加下划线等特别符号。3 数据库技术标准3.1 概述本标准目前只合适部分数据库的相关定义。3.2 命名根本规则针对不同工程模块采纳不同的数据命名。开发时数据库:dev+系统名。如:devcompute。试运转数据库:test+系统名。如:testcompute。正式运转数据库:系统名。如:compute。3.3 数据库表空间3.3.1 命名根本规则表空间:tbs_+系统名。如:tbs_compute。临时表空
37、间:tbs_+系统名+tempspace。如:tbs_computetempspace。3.4 默认用户方案 User name :raysdata/root Password :raysdata/root3.5 表的命名规则、商定命名根本规则按照表在当前数据仓库内不同数据职能划分,所有字母均大写:字典定义类表以 D_开头;如:D_DIM。关系定义类表以P_开头,当前表示关系类名称中间以“_”分割,表示两者关系;如:P_ITEM_IDT。数据汇总类表以G_开头,拥有数据维度的,将维度名称采纳”_”分割,拼合在表名称中;如:G_ITEM_VSN对前端报表支持表以R_开头,名称采纳各报表业务名称定
38、义,如:R_CONFIG_LOG3.6 视图的命名规则、商定命名根本规则vi_视图的类型(模块名)_英文单词_英文单词_.例如:vi_base_message。3.7 字段命名规则、商定命名根本规则英文单词_英文单词_英文单词_.例如:message_id、message_name。3.8 存储过程的命名规则、商定命名根本规则usp_英文单词_英文单词_.例如:usp_message3.9 序列对象的命名规则、商定命名根本规则seq_英文单词_英文单词_如:seq_base_message。3.10 触发器命名规则、商定命名根本规则trigger_英文单词_英文单词_如:trigger_mes
39、sage。4 HIVE技术标准1. 按照表在当前数据仓库内不同数据职能划分,所有字母均大写:字典定义类表以 D_开头;如:D_DIM。关系定义类表以P_开头,当前表示关系类名称中间以“_”分割,表示两者关系;如:P_ITEM_IDT。数据集成类表以FACT_开头,使用相关业务定义名称,如:FACT_数据汇总类表以G_开头,拥有数据维度的,将维度名称采纳”_”分割,拼合在表名称中;如:G_ITEM_VSN对前端报表支持表以R_开头,名称采纳各报表业务名称定义,如:R_CONFIG_LOG2. 数据途径数据途径内全部按照大写定义途径字符。5 HBase设计标准介绍了HBase应用开发时建议遵照的设
40、计标准,主要是针对开发层面的。Hbase中与表构造相关的逻辑模型涉及到以下几个词汇:命名空间、表、列族、列、行键、版本等,这些是构建hbase表的所有元素。下文就依照这几个关键词汇,陈述下相关的标准。5.1 Namespace命名空间设计浅显地讲,命名空间可视为表组(与Oracle中的表空间类似),划分依照不固定,可依照业务类型划分,也可依照时间周期划分。譬如,针对电力气象方面的数据表,能够创立一个电力气象的命名空间,取名为DLQX,将电力气象相关的表都组织在此命名空间下面。引进命名空间的好处确实是方便对表进展组织治理。HBase默认的命名空间是default,默认情况下,假如在创立表时没有显
41、式地指定命名空间,那么表将创立在default命名空间下。假如表隶属于某个非默认的命名空间,那么在援用表(譬如读取表数据)时,就必须指定命名空间,否则将出现类似“无法定位到表”的错误,完好表名的格式为“命名空间名称:表名称”,譬如”DLQX:SYSTEM_USER”;假如是默认的命名空间,则完好表名也能够省略掉“default:”,直截了当拼写表名SYSTEM_USER即可。命名空间与表的关系,能够用下列图表示:命名空间与表之间是一对多的关系,即一个命名空间下面能够包含多个hbase表,但一个hbase表只能属于一个命名空间。在创立表时,假如没有指定命名空间(或者命名空间为空),则系统会将此h
42、base表放置在默认命名空间(default)下。另外,删除命名空间之前,必须先删除掉此命名空间下的所有hbase表,否则将无法删除此命名空间。5.2 1.2. Table表设计HBase有几个高级特性,在你设计表时能够使用。这些特性不一定联络到方式或行键设计,但是它们定义了某些方面的表行为。5.2.1 理想HBase表Hbase作为列数据库,依照官方的说法,在功能和效率上更擅长处理“高而瘦”的表,而非“矮而胖”的表。所谓“高而瘦”,是指表的列的数量较少,但是行的数量极大,从而使表展现出一种又高又瘦的形象。所谓“矮而胖”,是指表的列的数据居多,但是行的数量却有限,给人一种又矮又胖的形象,尽管h
43、base表号称可包容百万列,但是那也仅仅限于理论上的极限,在实际应用中,请尽量构建“高而瘦”的表,同时需要对列的数量进展测试,以防止过度妨碍读写功能。5.2.2 预创立分区默认情况下,在创立HBase表的时候会自动创立一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进展切分。一种能够加快批量写入速度的方法是通过预先创立一些空的regions,如此当数据写入HBase时,会按照region分区情况,在集群内做数据的负载平衡。5.2.3 列族数量不要在一张表里定义太多的column family。目前Hbase并不能非常好的
44、处理超过23个column family的表。由于某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O。因而,依照官方的建议,一个HBase表中创立一个列族即可。5.2.4 可配置的数据块大小HFile数据块大小能够在列族层次设置。这个数据块不同于HDFS数据块。其默认值是65,536字节,或64KB。数据块索引存储每个HFile数据块的起始键。数据块大小设置妨碍到数据块索引的大小。数据块越小,索引越大,从而占用更大内存空间。同时由于加载进内存的数据块更小,随机查找功能更好。但是假如你需要更好的序列功能
45、,那么一次能够加载更多HFile数据进入内存则更为合理,这意味着数据块应该设置为更大的值。相应地索引变小,你将在随机读功能上付出代价。5.2.5 数据块缓存把数据放进读缓存,但工作负载却经常不能从中获得功能提升。例如,假如一张表或表里的列族只被顺序化访咨询或者非常少被访咨询,你不会介意Get或Scan花费时间是否有点儿长。在这种情况下,你能够选择关闭那些列族的缓存。假如你只是执行非常多顺序化,你会屡次倒腾缓存,同时可能会滥用缓存把应该放进缓存获得功能提升的数据给排斥出去。假如关闭缓存,你不仅能够防止上述情况发生,而且能够让出更多缓存给其他表和同一表的其他列族使用。5.2.6 激进缓存你能够选择一些列族,给予它们在数据块缓存里有更高的优先级(LRU缓存)。假如你预期一个列族比另一个列族随机读更多,这个特性迟早用得上。IN_MEMORY参数的默认值是false。由于HBase除了在数据块缓存里保存这个列族相比其他列族更激进之外并不提供额外的保证,该参数在实践中设置为true不会变化太大。创立表的时候,能够通过HColumnDescriptor.set
限制150内