数据中心产品开发规范.docx

上传人:夺命阿水 文档编号:1027511 上传时间:2024-03-01 格式:DOCX 页数:36 大小:84.23KB
返回 下载 相关 举报
数据中心产品开发规范.docx_第1页
第1页 / 共36页
数据中心产品开发规范.docx_第2页
第2页 / 共36页
数据中心产品开发规范.docx_第3页
第3页 / 共36页
数据中心产品开发规范.docx_第4页
第4页 / 共36页
数据中心产品开发规范.docx_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《数据中心产品开发规范.docx》由会员分享,可在线阅读,更多相关《数据中心产品开发规范.docx(36页珍藏版)》请在课桌文档上搜索。

1、数据中心产品开发规范XXXX公司XX业务部XXXX年XX月文档说明本文档所涉及到的文字、图表等,仅限于内部使用,未经双方书面许可,请勿扩散到第三方。文档属性属性内容客户名称:项目名称:文档主题:文档编号:文档版本:版本日期:文档状态:文档变更版本修订日期修订人描述文档送呈单位姓名目的批阅参阅1 概述51.1 最根本原则52 JaVa技术规范62.1 平台使用的有关技术62.1.1 基本核心框架包62.1.2 其他框架包62.2 程序设计标准72.2.1 命名约定82.2.2 包名,类名,方法名,属性名,常量名命名约定92.2.3 注释约定102.2.4 快速浏览JaVaDOC102.3 开发规

2、范122.3.1 项目结构说明122.3.2 整体包结构说122.3.3 项目模块包结构及命名132.3.4 各子项目模块功能包结构142.3.5 配置文件包结构142.4 命名规则142.4.1 共用类142.4.2 业务层142.4.3 展现层152.4.4 模型层152.4.5 持久层162.4.6 XML配置162.4.7 资源文件182.4.8 JSP文件192.4.9 事务命名约束203 数据库技术规范213.1 概述213.2 命名基本规则213.3 数据库表空间213.3.1 命名基本规则213.4 默认用户方案213.5 表的命名规则、约定213.6 视图的命名规则、约定22

3、3.7 字段命名规则、约定223.8 存储过程的命名规则、约定223.9 序列对象的命名规则、约定223.10 触发器命名规则、约定234 HlVE技术规范245 HBaSe设计规范255.1 Namespace命名空间设计255.2 12Table表设计265.2.1 理想HBase表265.2.2 预创建分区275.2.3 列族数量275.2.4 可配置的数据块大小275.2.5 数据块缓存285.2.6 激进缓存285.2.7 布隆过滤器(Bk)OmfilIerS)295.2.8 生存时间(TTL)305.2.9 数据压缩315.2.10 数据分割325.2.11 单元时间版本335.3

4、 ColumnFamily列族设计345.4 Qualifier歹IJ设计35365.6HBaSe命名规范1概述本文提供一整套编写高效可靠的JaVa代码的标准、约定与指南。它们以安全可靠的软件工程原则为基础,使代码易于懂得、保护与增强。而且,通过遵循这些程序设计标准,你作为一个JaVa软件开发者的生产效率会有显著提高。经验证明,若从一开始就花时间编写高质量的代码,则在软件开发阶段,对代码的修改要容易很多。最后,遵循一套通用的程序设计标准将带来更大的一致性,使软件开发团队的效率明显提高。1.1最根本原则运用常识当找不到任何规则或者指导方针,当规则明显不能适用,当所有的方法都失效的时侯:运用常识并

5、核实这些基本原则。这条规则比其它所有规则都重要。驼峰命名法驼峰命名法(CdmeICase):就是当变量名或者函式名是由一个或者多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开始;第二个单字的首字母大写或者每一个单字的首字母都使用大写字母,比如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。驼峰命名法的命名规则可视为一种惯例,并无绝对与强制,目的是增加识别与可读性。2Java技术规范2.1 平台使用的有关技术平台使用的框架包分核心框架包与其他务必的框架包,各框架包本身所依靠的开源包不做列举,由框架包本身的信息来定。2.1.1 基本

6、核心框架包平台使用Spring+Struts2+myBatis的三层架构作为基本框架。(JDKl.6+)。参考如下:名称版本备注Struts22.2.1Spring3.0.5mybatis-core3.1.1不支持跨数据库建议,目前开发在mysql上,现网环境在db2上mybatis-spring1.1.1MySQL5.0Tomcat7.0jQuery1.82.1.2 其他框架包除基本框架外,平台其他将使用的一些框架包,参考如下:(JDK1.5+)名称版本备注SpringSecurity2.0.4ApacheCommons2.6常用的工具包等SLF4J1.6.1ApacheLoggingIog

7、4j1.2.15ApacheAnt1.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 命名约定我们将在整个标准中讨论命名约定,下列是几个基本点: 使用能够准确说明变量/字段/类的完整的英文描述符比如,使用类似firstName,grandTotal或者CorPOrateCUStomer这样的名字。尽管象xl,yl或者fn这样的名字很简短,输入起来容易,但是我们难以明白它们代表什么、结果是什么含义,因而使代码难以懂得、保护与改进。 使用该领域的术语假如用户称他们的客户

9、(ClientS)为顾客(CUStomes),那么就使用术语CUStomer来命名这个类,而不用Client。许多程序开发者会犯的一个错误是,不去使用工业或者领域里已经存在着很完美的术语时,却生造出一些普通词汇。 使用大小写混合,提高名字的可读性通常应该使用小写字母,但是类与接口的名字的首字母,与任何中间单词的首字母应该大写。 尽量少用缩写,但假如一定要使用,就要慎重地使用这意味着应该保留一个标准缩写的列表,明智地从中选取,同时在使用时保持一致。比如,想对单词number使用缩写,那么可从nbr,no或者者num中选取一个,说明一下使用了哪一个(具体是哪个倒无所谓),同时只使用这一种形式。 避

10、免使用长名称(不超过15个字母)比如:PhysicaiorvirtuaiproductOrService看起来大概是个不错的类名,但是名字太长,应该考虑重新给它起个短一点的名字,比如象Offering。 避免使用相似或者者仅在大小写上有区别的名字比如,不应同时使用变量名PersistentObject与PersistentObjects及anSqlDatabase与anSQLDatabase这样的名称 避免使用下划线作为名字的首末字母下列划线为首末字母的名字通常为系统保留,除预处理定义之外,通常不用作用户命名。更重要的是,下划线经常造成烦恼而且难输入,因此尽量避免使用。2.2.2 包名,类名,

11、方法名,属性名,常量名命名约定口包命名包命名全部使用小写英文字母,中间不同意有数字下划线等特殊字符。 类,接口命名类,接口名开头使用大写英文字母,多单词使用驼峰命名法。类名中不要使用下划线与数字等特殊字符,正确的写法示例:HibernateDaoSupporto假如表示特殊功能的类,在类名的末尾加上所要表示的功能英文名称,如:*Listener,表示监听器等。 方法命名方法命名使用驼峰命名法,方法名中间不要使用下划线与数字等特殊字符,正确的示例:processing()o方法的参数与方法内部的局部参数可自定,符合要求就行。 特殊Bean类的属性命名约定Bean的属性命名规则严格使用驼峰命名法,

12、不同意使用下划线,名字长度最长不要超过15个字符,确实需要长名字时,适当缩写部分英文字母。 常量属性命名常量的命名规则通常为常量名全部使用大写字母,多单词之间使用下划线隔开,不同意使用数字等特殊字符,同时常量的声明一定要是staticfinal的。 普通类的属性命名普通类的属性命名除常量依照常量命名法外,其他的属性的名字使用“英文名字(首字母大写)”命名,多单词可使用鸵峰命名法或者用下划线隔开。2.2.3 注释约定本文还会对注释进行约定,有关注释风格能够在eclipse中导入codetemplates.m文件。下列是几个基本点: 注释应该增加代码的清晰度代码注释的目的是要使代码更易于被同时参与

13、程序设计的开发人员与其他后继开发人员懂得。 假如你的程序不值得注释,那么它也很可能也不值得运行。 保持注释的简洁最好的注释应该是简单明了的注释。注释不必洋洋洒洒,只需提供足够的信息,使别人能够懂得你的代码。 先写注释,后写代码写代码注释的最好方法是在写代码之前就写注释。这使你在写代码之前能够想想代码的功能与运行。而且这样确保不可能遗漏注释。另一种方法是边写代码边写注释。由于注释能够使代码更易懂得,因此在程序开发的过程中,也能够利用这一点。假如打算花些时间写注释,那么至少你应从这个过程中获得些什么。 注释信息不仅要包含代码的功能,还应给出原因比如,下面例1中的代码显示金额在$1,000以上(包含

14、$1,000)的定单可给予5%的折扣。为什么要这样做呢?难道有一个商业法则规定大额定单能够得到折扣吗?这种给大额定单的特殊是有的时候限的呢,还是一直都这样?最初的程序设计者是否只是由于慷慨大度才这样做呢?除非它们在某个地方(或者者是在源代码本身,或者者是在一个外部文档里)被注释出来,否则你不可能明白这些。2.2.4快速浏览JavaDocSun公司的JavaDevelopmentKit(JDK)中有一个名为javadoc的程序。它能够处理Java的源代码文件,同时为Java程序产生HTML文件形式的外部注释文档。Javadoc支持一定数目的标记,标识注释文档中各段起始位置的保留字。详情请参考JD

15、Kjavadoc文档。用于目的authorname类、接口说明特定某一段程序代码的作者。每一个作者各有一个标记。deprecated类、成员函数。说明该类的应用程序编程接口(API)已被废弃,因此应不再使用。exceptionnamedescription成员函数说明由成员函数发出的特殊。一个特殊使用一个标记,并要给出特殊的完整类名。paramnamedescription成员函数用来说明传递给一个成员函数的参数,其中包含参数的类型/类与用法。每个参数各有一个标记。returndescription成员函数若成员函数有返回值,对该返回值进行说明。应说明返回值的类型/类与可能的用途。since类

16、、成员函数说明自从有JDKLl以来,该项已存在了多长时间。seeCIassName类、接口、成员函数、字段在文档中生成指向特定类的超文本链接。能够同时应该使用完全合法的类名。seeClassName#memberfunctioName类、接口、成员函数、字段在文档中生成指向特定成员函数的超文本链接。能够同时应该使用完全合法的类名。versiontext类、接口说明特定一段代码的版本信息。你注释代码的方式很大地影响着你的工作效率与所有保护改进代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使你在开始撰写代码之前认真考虑这些代码,从而带来更高的工作效率。而且,当你重新阅读数天前或者者

17、数星期前所写的代码时,你能够很容易地推断出当时你是怎么想的,由于这一切都有记录。2.3.1 项目结构说明数据中心FDC项目使用多module式项目结构,其中包含如下项目,各项目模块功能说明如下:父模块模块依靠模块要紧业务功能描述FDCFdc-commonnone提供FDC项目中公用框架包及公用工具包FDCFdc-monitorFdc-common提供FDC项目中监控告警功能FDCFdc-computeFdc-monitor,Fdc-common提供FDC项目中核心数据运算功能(包含ETL,汇总,分发)。FDCFdc-reportFdc-monitor,Fdc-common提供FDC项目中数据展

18、现功能(报表展现,短信、邮件展现,数据导出等)2.3.2 整体包结构说包结构整体遵循按功能不一致分包,要紧表达出平台的整体架构。1 ,常用的包结构如2.3.2常用包结构及命名。2,各个模块包结构,如业务层,操纵层,持久层,特殊,模型POJ0,常量类,工具类等。这里的常用类与公共里的不一样假如各大模块在公共类里没有找到,能够在自己的模块中自行扩展。达到遵循开一闭原则。3 .常用XmI配置文件结构,如2.3.4配置文件包结构。4 .平台核心的配置文件,存放在包的根目录,如国际化,数据库连接,日志配置,缓存配置,系统级配置等。5 .自定义XmlWscheme,dtd,与tld文件存放于Web根目录的

19、WEB-INF文件夹下,文件名全部使用小写字母。233项目模块包结构及命名1. Fdc-common说明:所有的缓存结构。比如平台所使用的OSCaChe与EhCaChe缓存技术。说明:各个技术层框架类。如下子包controller:操纵层提供的共有框架类。Module:数据bean公共基础类。BUSineSS:业务层公共业务操纵类,提供通用功能。Persistence:数据持久层公共数据操作类。说明:存放基本常用的类。比如文件类,字符串类等。2. Fdc-moniter,Fdc-compute,Fdc-report configs说明:该包存放所有关于读取配置信息的类 Controller说明

20、:存放在操纵层下面的业务类。比如登陆,登出,角色切换等。 Module说明:存放各个业务数据bean类。下分各个子业务包。 Busines说明:存放个业务层公共业务操纵类。下分各个子业务包。 Persistence说明:数据持久层数据操纵类。下分各个子业务包。 extends说明:平台扩展功能类。下分子包,第一级子包名表示扩展功能模块名。 Exceptions2.3.4各子项目模块功能包结构按照各个层次结构包分完:功能包基本分为2个包:1.各个层次的接口包。2.关于接口的实现包。2.3.5配置文件包结构配置文件夹命名为Configs,可存放在Web根目录下的WEB-INF文件夹下,也可放在与j

21、avaClaSS文件根目录同级的目录下。configs目录下要紧包含下列目录结构: commons存放公共的Xml配置文件,如:struts,springzmybatis等的Xml配置文件。 core/*存放平台核心模块,各功能模块,扩展功能模块的所需的配置文件。如各模块的spring,struts,mybatis配置文件。2.4命名规则2.4.1 共用类公共用类要求以“功能英文名称(首字母大写)+UtiIS”鸵峰命名。比如:日期的英文名为date,按照规则要求,命名为:DateUtiIs。2.4.2 业务层业务层接口要求以I模块英文名称(首字母大写)+Mandger命名。比如:导航菜单的英文

22、名为navigator,按照规则要求,命名为:INaVigatorManager;接口的实现类要求以模块英文名称(首字母大写)+ManageHmpI命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorManagerImpI;2.4.3 展现层 基类要求以模块英文名称(首字母大写)+ActionBase命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorActionBase; 查询模块列表类要求以List模块英文名称(首字母大写)+s+Action命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:L

23、istNavigatorsAction; 创建模块对象类要求以Create+、模块英文名称(首字母大写)+Action命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:CreateNavigatorAction; 修改模块对象类要求以MOdify+模块英文名称(首字母大写)+Action命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:ModifyNavigatorAction; 删除模块对象类要求以Remove模块英文名称(首字母大写)+Action命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:RemoveNavigato

24、rAction; 对模块对象的操作类要求以模块英文名称(首字母大写)+Operator+Action命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorOperatorAction。2.4.4 模型层模型层存放的是实体类,要求以模块实体英文名称(首字母大写)命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:Navigator;属性字段参照Bean属性命名规则。2.4.5 持久层dao接口要求以I+模块英文名称(首字母大写)+DAO命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:INaVigatOrDAO;接口的

25、实现类要求以模块英文名称(首字母大写)+DAOImpI命名。比如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorDAOImpIo2.4.6 XML配置要紧配置文件包含spring.xmlzstruts.xml,mybatis.xml等。由于这些文件都是分包存放,因此配置文件统一为spring.xml,struts.ml,mybatis.xmlo假如模块内的SPring,struts,mybatis配置较多时,需要分文件来写,那么可直接在spring,struts,mybatis的后面直接加连接号+名字来命名。如spring-common.xmlo各模块的myba

26、tissqlmap配置文件放到相应模块的Model包下,一个域模型对应一个SqIMap配置文件,如域模型名为Item,则与域模型相对应的SqIMap文件名为Item.xmlo1、spring.xml平台Spring有关组件配置。Module 需要新建一个用户管理模块managerUserModule,设置其父节点是后台管理树的根节点,也就是设置PaentModeulId为#号,然后它的子节点能够设置相应的父节点为managerUserModule,o ationURL:指用来访问这个有关模块的命名空间。 viewType:查看类型,是指要说明此模块节点是要在前台显示还是后台管理的。 imgUR

27、L:指当我们把这些模块展示在有关树上显示的图标链接。Fuction 确定包含的功能,如增加用户:addseroMethod 增加用户的人口方法:SaveAddUsero actionUR:指这个入口方法在当前模块命名空间下的访问地址CreateUser.加一个点是用来推断最后的后缀,假如是点结尾程序会自动补齐访问链接的后缀,假如是其他后缀直接访问这个链接。 isDefault:是否默认入口,一个模块功能只能有一个方法作为默认入口。2、StnJtS.xml平台StnJtS组件有关配置,开发有关模块的时候注意有关规范 package:我们能够在模块中定义包以避免命名空间重复,命名规则:StrUtS

28、-xxx(模块名层)。 namespace:有关模块的命名空间。这里涉及几个需要注意的地方:这个链接会与权限关联由过滤器推断命名空间管理权限功能。凡是命名空间在publiccommon这个路径下的系统定义为前台没有权限管理的访问链接,凡是命名空间在/manage/CommOn这个路径下的系统定义为后台没有权限管理的访问链接。在这个两个路径下面访问的地址,过滤器不作权限推断。其它访问地址会根据rights中配置定义的权限进行过滤。 extends:在struts配置中需要考虑各类拦截器与错误处理跳转,配置在Struts-Interceptonxml这个文件。Action name:定义actio

29、n被访问的id命名规范与定义java变量同样的规范。 class:就是我们在spring.xml文件已经配置了注入actionspringbean的id。 result:StrUtS处理跳转,两种跳转方式dispatcher转向与redirect重定向。 interceptor-ref:所使用的拦截器。在StrUtSTnterceptouxml这个文件有有关注释。3、mybatis.xml,平台myBATIS有关组件配置 配置SqlMaP元素的resource属性,指示域模型对应的SQL配置文件的包全路径。4、myBATIS的SQLMaP文件配置域模型的增删改查SQL语句,存储过程等;配置文件

30、名与域模型同名。 SqIMaP根元素的namespace属性,设置成域模型的本身的名字。如域模型名字为ItemJava,那么namespace属性名就为Itemo typeAlias,resultMap,CacheModeLselect,insert,delete,UPdate等元素的id属性名以“自定英文名字(首字母小写)”命名,多单词使用驼峰命名法。 在使用SeIeCt,insert,update,delete元素配置增删改查时,id属性的名字规则为,SeIeCt的id属性名以get*开头,insert的以add*开头,UPdate的以UPdate*开头,delete的以delete*开头

31、,配合事务中的配置,多单词使用驼峰命名法。可在这些元素中使用复合查询配置。 procedure元素,的id属性名以“功能英文名(首字母小写)+Procedurew命名,使用驼峰命名法。 sql元素的id属性名以“自定义英文名字(首字母小写)”命名。多个单词可使用下划线或者使用驼峰命名法。 statement元素的id属性名与sql元素命名规则致。statement要紧配置复合查询。5、ehcache.xml平台ehcache缓存实现配置文件6system-config.xml平台系统配置文件2.4.7 资源文件平台Poperties与国际化资源配置文件 commons-logging.prop

32、erties公共日志配置文件。 config.properties平台数据连接,基本参数配置等。 Iog4j.properties平台日志输出储存等有关设置的配置文件。 quartz.properties平台调度组件有关设置的配置文件。 oscache.properties平台OSCaChe缓存实现配置文件 struts.properties平台StrUtS组件有关系统配置文件(国际化、上传等)。国际化资源文件使用标准JSTL标签绑定。通过不一致的local读取不一致语言的有关资源,国际化资源文件中key的定义规则:模块名称,功能名称.key描述,但此全部小写,多个单词之间用下划线分割。国际化

33、资源配置文件进行分割处理,属于本功能模块的国际化资源文件放到本模块的根包下,在JSP中使用JSTL标签的Vfmt:messagebundle=/调用,在文件开头处加上Vfmt:setBundlebasename=/设置。全局国际化配置文件如下(直接设置在Struts.Properties文件中): messages开头的资源文件包含有关的国际化资源内容。 exceptionMessages开头的资源文件包含特殊处理描述的国际化资源内容。各功能模块的国际化配置文件使用如下:口文件名使用“功能模块名+wz+messages”命名,如SearCh.message.properties。 在JSP文件

34、最开头处使用标签Vfmt:SetBUndIebasename=/设置全局bundle,其中basename属性名为模块资源文件所在的包全路径,SCoPe为使用范围。 在位于SetBundIe设置后使用Vfrnt:messagekey=”标签可直接使用该资源文件中的key属性。2.4.8 JSP文件 JSP文件统一存放在应用的Web根目录下,即与WEBdNF文件夹同级。 文件夹名按照java关于的功能模块名来设置,文件夹名全部使用小写字母。 JSP文件名以“自定英文名(首字母小写)+功能名”命名,多单词英文可使用驼峰命名法。2.4.9 事务命名约束平台中,所有关于事务处理的,务必遵循下列命名规则

35、: 储存/填加:以SaVe开头。 修改:以UPdate开头。 删除:以delete开头。 获取:以get开头。 查找:以find开头。2.4.10 JS命名约束与JaVa命名一致,但JS文件名可小写,甚至能够加下划线等特殊符号。3数据库技术规范1.1 概述本规范目前只适合部分数据库的有关定义。1.2 命名基本规则针对不一致工程模块使用不一致的数据命名。开发时数据库:dev+系统名。如:devcomputeo试运行数据库:test+系统名。11:testcomputeo正式运行数据库:系统名。如:ComPUte。1.3 数据库表空间1.3.1 命名基本规则表空间:tbs+系统名。如:tbscom

36、puteIneSSagenaIne。1.8 存储过程的命名规则、约定命名基本规则USP一英文单词一英文单词.比如:Uspmessage1.9 序列对象的命名规则、约定命名基本规则seq_英文单词英文单词如:seq_base_messageo1.10 触发器命名规则、约定命名基本规则trigger.英文单词_英文单词如:triggermessage04 HlVE技术规范1 .按照表在当前数据仓库内不一致数据职能划分,所有字母均大写:字典定义类表以D开头;如:DDBL关系定义类表以P开头,当前表示关系类名称中间以“”分割,表示两者关系;如:PITEMIDTo数据集成类表以FACT开头,使用有关业务

37、定义名称,如:FACT数据汇总类表以G开头,拥有数据维度的,将维度名称使用”.分割,拼合在表名称中;如:G_ITEKLVSN对前端报表支持表以R开头,名称使用各报表业务名称定义,如:RCONFIGLOG2 .数据路径数据路径内全部按照大写定义路径字符。5 HBase设计规范介绍了HBaSe应用开发时建议遵循的设计规范,要紧是针对开发层面的。Hbase中与表结构有关的逻辑模型涉及到下列几个词汇:命名空间、表、列族、歹U、行键、版本等,这些是构建hbase表的所有元素。下文就根据这几个关键词汇,陈述下有关的规范。5.1 Namespace命名空间设计HBaSe默认的命名空间是default,默认情

38、况下,假如在创建表时没有显式地指定命名空间,那么表将创建在default命名空间下。假如表隶属于某个非默认的命名空间,那么在引用表(譬如读取表数据)时,就务必指定命名空间,否则将出现类似无法定位到表”的错误,完整表名的格式为命名空间名称:表名称,譬如DLQX:SYSTEM_USER;假如是默认的命名空间,则完整表名也能够省略掉default:,直接拼写表名SYSTEM_USER即可。命名空间与表的关系,能够用下图表示:NameSpace命名空间命名空间与表之间是一对多的关系,即一个命名空间下面能够包含多个hbase表,但一个hbase表只能属于一个命名空间。在创建表时,假如没有指定命名空间(或

39、者者命名空间为空),则系统会将此hbase表放置在默认命名空间(default)下。另外,删除命名空间之前,务必先删除掉此命名空间下的所有hbase表,否则将无法删除此命名空间。521.2.Table表设计HBaSe有几个高级特性,在你设计表时能够使用。这些特性不一定联系到模式或者行键设计,但是它们定义了某些方面的表行为。5.2.1理想HBase表HbaSe作为列数据库,根据官方的说法,在性能与效率上更擅长处理高而瘦的表,而非矮而胖的表。所谓高而瘦,是指表的列的数量较少,但是行的数量极大,从而使表展现出一种又高又瘦的形象。所谓矮而胖,是指表的列的数据居多,但是行的数量却有限,给人一种又矮又胖的

40、形象,尽管hbase表号称可容纳百万列,但是那也仅仅限于理论上的极限,在实际应用中,请尽量构建高而瘦的表,同时需要对列的数量进行测试,以避免过度影响读写性能。522预创建分区默认情况下,在创建HBaSe表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种能够加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。5.2.3 列族数量不要在一张表里定义太多的columnfamilyo目前Hbase并不能很好的处

41、理超过23个columnfamily的表。由于某个columnfamily在flush的时候,它邻近的columnfamily也会因关联效应被触发flush,最终导致系统产生更多的I/O。因此,根据官方的建议,一个HBase表中创建一个列族即可。5.2.4 可配置的数据块大小HFiIe数据块大小能够在列族层次设置。这个数据块不一致于HDFS数据块。其默认值是65,536字节,或者64KB。数据块索引存储每个HFiIe数据块的起始键。数据块大小设置影响到数据块索引的大小。数据块越小,索引越大,从而占用更大内存空间。同时由于加载进内存的数据块更小,随机查找性能更好。但是假如你需要更好的序列扫描性能

42、,那么一次能够加载更多HFiIe数据进入内存则更为合理,这意味着数据块应该设置为更大的值。相应地索引变小,你将在随机读性能上付出代价。5.2.5 数据块缓存把数据放进读缓存,但工作负载却经常不能从中获得性能提升。比如,假如一张表或者表里的列族只被顺序化扫描访问或者者很少被访问,你不可能介意Get或者Scan花费时间是否有点儿长。在这种情况下,你能够选择关闭那些列族的缓存。假如你只是执行很多顺序化扫描,你会多次倒腾缓存,同时可能会滥用缓存把应该放进缓存获得性能提升的数据给排挤出去。假如关闭缓存,你不仅能够避免上述情况发生,而且能够让出更多缓存给其他表与同一表的其他列族使用。5.2.6 激进缓存你

43、能够选择一些列族,给予它们在数据块缓存里有更高的优先级(LRU缓存)。假如你预期一个列族比另一个列族随机读更多,这个特性迟早用得上。IN_MEMORY参数的默认值是faIseO由于HBase除了在数据块缓存里储存这个列族相比其他列族更激进之外并不提供额外的保证,该参数在实践中设置为true不可能变化太大。创建表的时候,能够通过HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中。5.2.7 布隆过滤器(Bloomfilters)数据块索引提供了一个有效的方法,在访问一个特定的行时用来查找应该读取的HFi

44、Ie的数据块。但是它的效用是有限的。HFiIe数据块的默认大小是64KB,这个大小不能调整太多。假如你要查找一个短行,只在整个数据块的起始行键上建立索引无法给你细粒度的索引信息。比如,假如你的行占用100字节存储空间,一个64KB的数据块包含(64*1024)/100=655.53=700行,而你只能把起始行放在索引位上。你要查找的行可能落在特定数据块上的行区间里,但也不是确信存放在那个数据块上。这有多种情况的可能,或者者该行在表里不存在,或者者存放在另一个HFiIe里,甚至在MemStoe里。这些情况下,从硬盘读取数据块会带来IO开销,也会滥用数据块缓存。这会影响性能,特别是当你面对一个巨大的数据集同时有很多并发读用户时。布隆过滤器同意你对存储在每个数据块的数据做一个反向测试。当某行被请求时,先检查布隆过滤器看看该行是否不在这个数据块。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号