产品管理数据中心产品开发规范_第1页
产品管理数据中心产品开发规范_第2页
产品管理数据中心产品开发规范_第3页
产品管理数据中心产品开发规范_第4页
产品管理数据中心产品开发规范_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

产品管理数据中心产品开发规范数据中心产品开发规范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项目结构说明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存储过程的命名规则、约定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布隆过滤器(Bloomfilters)305.2.8生存时间(TTL)315.2.9数据压缩325.2.10数据分割335.2.11单元时间版本345.3ColumnFamily列族设计355.4Qualifier列设计365.5版本设计375.6HBase命名规范371概述本文提供一整套编写高效可靠的Java件工程原则为基础,使代码易于理解、维护和增强。而且,通过遵循这些程序设计标准,你作为一个Java软件开发者的生产效率会有显著提高。经验证明,若从一开始就花时间编写高质量的代码,则在软件开发阶段,对代码的修改要容易很多。最后,遵循一套通用的程序设计标准将带来更大的一致性,使软件开发团队的效率明显提高。1.1最根本原则运用常识当找不到任何规则或指导方针,当规则明显不能适用,当所有的方法都失效的时侯:运用常识并核实这些基本原则。这条规则比其它所有规则都重要。驼峰命名法驼峰命名法(Camel-Case而构成的唯一识别字时,第一个单字以小写字母开始;第二个单字的首字母大写或每一个myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。驼峰命名法的命名规则可视为一种惯例,并无绝对与强制,目的是增加识别和可读性。2Java技术规范2.1平台使用的相关技术平台使用的框架包分核心框架包和其他必须的框架包,各框架包本身所依赖的开源包不做列举,由框架包本身的信息来定。2.1.1基本核心框架包平台采用Spring+Struts2+myBatisJDK1.6+名称版本备注Struts22.2.1Spring3.0.5mybatis-core3.1.1不支持跨数据库建议,目前开发在mysql上,现网环境在db2上mybatis-spring1.1.1MySQL5.0Tomcat7.0jQuery其他框架包除基本框架外,平台其他将采用的一些框架包,参考如下:(JDK1.5+)名称版本备注SpringSecurity2.0.4ApacheCommons2.6常用的工具包等1.6.1

SLF4JApacheLogginglog4j1.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代码在你已离开并开始另一个项目之后,会保留相当长的一段时间。因此开发过程中一个很重要的目标就是要确保在开发成员或开发团队之间的工作可以顺利交接,不必花很大的力气便能理解已编写的代码,以便继续维护和改进以前的工作。如果代码难以理解,很有可能被废弃和重写。s2.2.1命名约定我们将在整个标准中讨论命名约定,以下是几个基本点:使用可以准确说明变量/字段/类的完整的英文描述符例如,采用类似firstName,grandTotal或CorporateCustomer这样的名字。虽然象x1,y1或fn这样的名字很简短,输入起来容易,但是我们难以知道它们代表什么、结果是什么含义,因而使代码难以理解、维护和改进。采用该领域的术语如果用户称他们的“客户”(clients)为“顾客”(customers),那么就采用术语CustomerClient用工业或领域里已经存在着很完美的术语时,却生造出一些普通词汇。采用大小写混合,提高名字的可读性一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。尽量少用缩写,但如果一定要使用,就要谨慎地使用这意味着应该保留一个标准缩写的列表,明智地从中选取,并且在使用时保持一致。例如,想对单词“number”采用缩写,那么可从nbr,no或者num中选取一个,避免使用长名称(不超过15个字母)例PhysicalOrVirtualProductOrService看起来似乎是个不错的类名,但是名字太长,应该考虑重新给它起个短一点的名字,比如象Offering。避免使用相似或者仅在大小写上有区别的名字例如,不应同时使用变量名persistentObject和persistentObjects及anSqlDatabase和anSQLDatabase这样的名称避免使用下划线作为名字的首末字母以下划线为首末字母的名字通常为系统保留,除预处理定义之外,一般不用作用户命名。更重要的是,下划线经常造成麻烦而且难输入,所以尽量避免使用。2.2.2包名,类名,方法名,属性名,常量名命名约定包命名包命名全部使用小写英文字母,中间不允许有数字下划线等特殊字符。类,接口命名类,接口名开头使用大写英文字母,多单词使用驼峰命名法。类名中不要使用下划线和数字等特殊字符,正确的写法示例:HibernateDaoSupport。如果表示特殊功能的类,在类名的末尾加上所要表示的功能英文名称,如:****Listener,表示监听器等。方法命名方法命名使用驼峰命名法,方法名中间不要使用下划线和数字等特殊字符,正确的示例:processing()。方法的参数以及方法内部的局部参数可自定,符合要求就行。特殊Bean类的属性命名约定Bean的属性命名规则严格使用驼峰命名法,不允许使用下划线,名字长度最长不要超过15个字符,确实需要长名字时,适当缩写部分英文字母。常量属性命名常量的命名规则一般为常量名全部采用大写字母,多单词之间使用下划线隔开,不允许使用数字等特殊字符,并且常量的声明一定要是staticfinal的。普通类的属性命名普通类的属性命名除常量依照常量命名法外,其他的属性的名字使用“英文名字2.2.3注释约定eclipse中导入codetemplates.xm文件。以下是几个基本点:注释应该增加代码的清晰度代码注释的目的是要使代码更易于被同时参与程序设计的开发人员以及其他后继开发人员理解。如果你的程序不值得注释,那么它也很可能也不值得运行。保持注释的简洁最好的注释应该是简单明了的注释。注释不必洋洋洒洒,只需提供足够的信息,使别人能够理解你的代码。先写注释,后写代码写代码注释的最好方法是在写代码之前就写注释。这使你在写代码之前可以想想代码的功能和运行。而且这样确保不会遗漏注释。另一种方法是边写代码边写注释。因为注释可以使代码更易理解,所以在程序开发的过程中,也可以利用这一点。如果打算花些时间写注释,那么至少你应从这个过程中获得些什么。注释信息不仅要包括代码的功能,还应给出原因1中的代码显示金额在$1,000$1,0005%的折扣。为什么要这样做呢?难道有一个商业法则规定大额定单可以得到折扣吗?这种给大额定单的特殊是有时限的呢,还是一直都这样?最初的程序设计者是否只是由于慷慨大度才这样做呢?除非它们在某个地方(或者是在源代码本身,或者是在一个外部文档里)被注释出来,否则你不可能知道这些。2.2.4快速浏览JavaDocSun公司的JavaDevelopmentKit(JDK)中有一个名为javadocJavaJava程序产生HTMLJavadoc支持一定数目的标记,标识注释文档中各段起始位置的保留字。详情请参考JDKjavadoc文档。标记用于目的@authorname类、接口说明特定某一段程序代码的作者。每一个作者各有一个标记。@deprecated说明该类的应用程序编程接口(API)@exceptionnamedescription成员函数说明由成员函数发出的异常。一个异常采用一个标记,并要给出异常的完整类名。用来说明传递给一个成员函数的@paramnamedescription成员函数/类和用法。每个参数各有一个标记。若成员函数有返回值,对该返回@returndescription成员函数值进行说明。应说明返回值的类型/类和可能的用途。@since类、成员函数说明自从有JDK1.1存在了多长时间。@seeClassName类、接口、成员函数、字段在文档中生成指向特定类的超文本链接。可以并且应该采用完全合法的类名。@seeClassName#memberfunctionName类、接口、成员函数、字段在文档中生成指向特定成员函数的超文本链接。可以并且应该采用完全合法的类名。@versiontext类、接口说明特定一段代码的版本信息。你注释代码的方式很大地影响着你的工作效率以及所有维护改进代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使你在开始撰写代码之前仔细考虑这些代码,从而带来更高的工作效率。而且,当你重新阅读数天前或者数星期前所写的代码时,你可以很容易地判断出当时你是怎么想的,因为这一切都有记录。2.3开发规范2.3.1项目结构说明数据中心FDC项目采用多module明如下:父模块模块依赖模块主要业务功能描述FDCFdc-commonnone提供FDC项目中公用框架包及公用工具包FDCFdc-monitorFdc-common提供FDC项目中监控告警功能FDCFdc-computeFdc-monitor,Fdc-common提供FDC项目中核心数据运算功能(包括ETLFDCFdc-reportFdc-monitor,Fdc-common提供FDC表展现,短信、邮件展现,数据导出等)2.3.2整体包结构说包结构整体遵循按功能不同分包,主要体现出平台的整体架构。1.常用的包结构如2.3.2常用包结构及命名。2.POJO这里的常用类和公共里的不一样如果各大模块在公共类里没有找到,可以在自己的模块中自行扩展。达到遵循“开—闭”原则。3.常用xml配置文件结构,如2.3.4配置文件包结构。4.平台核心的配置文件,存放在包的根目录,如国际化,数据库连接,日志配置,缓存配置,系统级配置等。5.自定义xml的schemedtdtld文件存放于Web根目录的WEB-INF件名全部使用小写字母。2.3.3项目模块包结构及命名1.Fdc-commonmon.cache说明:所有的缓存结构。例如平台所使用的Oscache和Ehcache缓存技术。mon.framework说明:各个技术层框架类。如下子包controller:控制层提供的共有框架类。Module:数据bean公共基础类。Business:业务层公共业务控制类,提供通用功能。Persistence:数据持久层公共数据操作类。mon.utils说明:存放基本常用的类。例如文件类,字符串类等。2.Fdc-moniter,Fdc-compute,Fdc-reportconfigs说明:该包存放所有关于读取配置信息的类Controller说明:存放在控制层下面的业务类。例如登陆,登出,角色切换等。Module说明:存放各个业务数据bean类。下分各个子业务包。Busines说明:存放个业务层公共业务控制类。下分各个子业务包。Persistence说明:数据持久层数据控制类。下分各个子业务包。extends说明:平台扩展功能类。下分子包,第一级子包名表示扩展功能模块名。Exceptions2.3.4各子项目模块功能包结构按照各个层次结构包分完:功能包基本分为2个包:1.各个层次的接口包。2.对于接口的实现包。2.3.5配置文件包结构配置文件夹命名为configsWeb根目录下的WEB-INFjavaclass文件根目录同级的目录下。configs目录下主要包含以下目录结构:commons存放公共的Xml配置文件,如:struts,spring,mybatis等的xml配置文件。core/*存放平台核心模块,各功能模块,扩展功能模块的所需的配置文件。如各模块的spring,struts,mybatis配置文件。2.4命名规则2.4.1共用类公共用类要求以“功能英文名称(首字母大写)+Utils”驼峰命名。例如:日期的英文名为date,按照规则要求,命名为:DateUtils。2.4.2业务层业务层接口要求以I+“模块英文名称(首字母大写)”+Manager命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:INavigatorManager;接口的实现类要求以“模块英文名称(首字母大写)”+ManagerImpl航菜单的英文名为navigator,按照规则要求,命名为:NavigatorManagerImpl;2.4.3展现层基类要求以“模块英文名称(首字母大写)”+ActionBase命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorActionBase;查询模块列表类要求以List+“模块英文名称(首字母大写)”+s+Action命名。例navigatorListNavigatorsAction;创建模块对象类要求以Create+“模块英文名称(首字母大写)”+Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:CreateNavigatorAction;修改模块对象类要求以Modify+“模块英文名称(首字母大写)”+Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:ModifyNavigatorAction;删除模块对象类要求以Remove+“模块英文名称(首字母大写)”+Action命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:RemoveNavigatorAction;对模块对象的操作类要求以“模块英文名称(首字母大写命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:NavigatorOperatorAction。2.4.4模型层模型层存放的是实体类,要求以“模块实体英文名称(首字母大写)”命名。例如:导航菜单的英文名为navigator,按照规则要求,命名为:Navigator;属性字段参照Bean属性命名规则。2.4.5持久层dao接口要求以I+“模块英文名称(首字母大写)”+DAO文名为navigator,按照规则要求,命名为:INavigatorDAO;接口的实现类要求以“模块英文名称(首字母大写)”+DAOImpl单的英文名为navigator,按照规则要求,命名为:NavigatorDAOImpl。2.4.6XML配置主要配置文件包括spring.xml,struts.xml,mybatis.xml等。由于这些文件都是分包存放,所以配置文件统一为spring.xml,struts.xml,mybatis.xml。如果模块内的springstrutsmybatis配置较多时,需要分文件来写,那么可直接在spring,struts,mybatis的后面直接加连接号“-”+名字来命名。如spring-common.xml。各模块的mybatissqlmap配置文件放到相应模块的Model包下,一个域模型对应一个sqlMap配置文件,如域模型名为Item,则与域模型相对应的sqlMap文件名为Item.xml。1、spring.xml平台Spring相关组件配置。Module需要新建一个用户管理模块managerUserModule,设置其父节点是后台管理树的根parentModeulId为#为managerUserModule,。ationURL:指用来访问这个相关模块的命名空间。viewType:查看类型,是指要说明此模块节点是要在前台显示还是后台管理的。imgURL:指当我们把这些模块展示在相关树上显示的图标链接。Fuction确定包含的功能,如增加用户:addUser。Method增加用户的入口方法:saveAddUser。actionUR:指这个入口方法在当前模块命名空间下的访问地址createUser.加一个其他后缀直接访问这个链接。isDefault:是否默认入口,一个模块功能只能有一个方法作为默认入口。2、struts.xml平台struts组件相关配置,开发相关模块的时候注意相关规范packagestruts-xxx(模块名层)。namespace:相关模块的命名空间。这里涉及几个需要注意的地方:这个链接会和/public/common这个路径下的系统定义为前台没有权限管理的访问链接,凡是命名空间在/manage/common个路径下面访问的地址,过滤器不作权限判断。其它访问地址会根据rights中配置定义的权限进行过滤。extends:在struts配置中需要考虑各种拦截器和错误处理跳转,配置在struts-interceptor.xml这个文件。Actionname:定义action被访问的id命名规范与定义java变量同样的规范。class:就是我们在spring.xml文件已经配置了注入actionspringbean的id。result:struts处理跳转,两种跳转方式dispatcher转向和redirect重定向。interceptor-refstruts-interceptor.xml这个文件有相关注释。3、mybatis.xml,平台myBATIS相关组件配置配置sqlMap元素的resource属性,指示域模型对应的SQL配置文件的包全路径。4、myBATIS的SQLMap文件配置域模型的增删改查SQL语句,存储过程等;配置文件名与域模型同名。sqlMap根元素的namespace属性,设置成域模型的本身的名字。如域模型名字为Item.java,那么namespace属性名就为Item。typeAliasresultMapcacheModelselectinsertdeleteupdate等元素的id在使用select,insert,update,delete元素配置增删改查时,id属性的名字规则为,select的id属性名以get***开头,insert的以add***开头,update的以update***开头,delete的以delete***开头,配合事务中的配置,多单词使用驼峰命名法。可在这些元素中使用复合查询配置。procedure元素,的id属性名以“功能英文名(首字母小写)+Procedure”命名,使用驼峰命名法。sql元素的id属性名以“自定义英文名字(首字母小写)”命名。多个单词可使用下划线或使用驼峰命名法。statement元素的id属性名与sqlstatement主要配置复合查询。5、ehcache.xml平台ehcache缓存实现配置文件6、system-config.xml平台系统配置文件2.4.7资源文件平台properties以及国际化资源配置文件perties公共日志配置文件。perties平台数据连接,基本参数配置等。perties平台日志输出保存等相关设置的配置文件。perties平台调度组件相关设置的配置文件。perties平台oscache缓存实现配置文件perties平台struts国际化资源文件使用标准JSTLlocal读取不同语言的相关资源,国际化资源文件中key.功能名称.key描述,但此全部小写,多个单词之间用下划线分割。国际化资源配置文件进行分割处理,属于本功能模块的国际化资源文件放到本模块的根包下,在JSP中使用JSTL标签的<fmt:messagebundle=””/>调用,在文件开头处加上<fmt:setBundlebasename=””/>设置。全局国际化配置文件如下(直接设置在perties文件中):messages开头的资源文件包含相关的国际化资源内容。exceptionMessages开头的资源文件包含异常处理描述的国际化资源内容。各功能模块的国际化配置文件使用如下:文件名使用“功能模块名+”_”+messages”命名,如search_perties。在JSP文件最开头处使用标签<fmt:setBundlebasename=””/>设置全局bundle,其中basename属性名为模块资源文件所在的包全路径,scope为使用范围。在位于setBundle设置后使用<fmt:messagekey=””>标签可直接使用该资源文件中的key属性。2.4.8JSP文件JSP文件统一存放在应用的Web根目录下,即与WEB-INF文件夹同级。文件夹名按照java对于的功能模块名来设置,文件夹名全部使用小写字母。JSP“功能名用驼峰命名法。2.4.9事务命名约束平台中,所有关于事务处理的,必须遵循以下命名规则:保存/填加:以save开头。修改:以update开头。删除:以delete开头。获取:以get开头。查找:以find开头。2.4.10JS命名约束与Java命名一致,但JS文件名可小写,甚至可以加下划线等特殊符号。3数据库技术规范3.1概述本规范目前只适合部分数据库的相关定义。3.2命名基本规则针对不同工程模块采用不同的数据命名。开发时数据库:dev+系统名。如:devcompute。试运行数据库:test+系统名。如:testcompute。正式运行数据库:系统名。如:compute。3.3数据库表空间3.3.1命名基本规则表空间:tbs_+系统名。如:tbs_compute。临时表空间:tbs_+系统名+tempspace。如:tbs_computetempspace。3.4默认用户方案Username:raysdata/rootPassword:raysdata/root3.5表的命名规则、约定命名基本规则按照表在当前数据仓库内不同数据职能划分,所有字母均大写:字典定义类表以D_开头;如:D_DIM。关系定义类表以P_开头,当前表示关系类名称中间以“_”分割,表示两者关系;如:P_ITEM_IDT。数据汇总类表以G_中;如:G_ITEM_VSN对前端报表支持表以R_开头,名称采用各报表业务名称定义,如: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_message。4HIVE技术规范1.按照表在当前数据仓库内不同数据职能划分,所有字母均大写:字典定义类表以D_开头;如:D_DIM。关系定义类表以P_开头,当前表示关系类名称中间以“_”分割,表示两者关系;如:P_ITEM_IDT。数据集成类表以FACT_开头,使用相关业务定义名称,如:FACT_数据汇总类表以G_中;如:G_ITEM_VSN对前端报表支持表以R_开头,名称采用各报表业务名称定义,如:R_CONFIG_LOG2.数据路径数据路径内全部按照大写定义路径字符。5HBase设计规范介绍了HBase面的。Hbasehbase就依据这几个关键词汇,陈述下相关的规范。5.1Namespace命名空间设计通俗地讲,命名空间可视为表组(与Oracle中的表空间类似),划分DLQX好处就是方便对表进行组织管理。HBase默认的命名空间是default,默认情况下,如果在创建表时没有default“无法定位到表名的格式为“命名空间名称:表名称”,譬如”DLQX:SYSTEM_USER”;“default:”拼写表名SYSTEM_USER即可。命名空间与表的关系,可以用下图表示:hbasehbasehbase表放置在默认命名空间(default)下。hbase表,否则将无法删除此命名空间。5.21.2.Table表设计HBase到模式或行键设计,但是它们定义了某些方面的表行为。5.2.1理想HBase表Hbase“高而瘦“矮而胖“高而瘦,是指表的列的数“矮而胖hbase“高而瘦要对列的数量进行测试,以避免过度影响读写性能。5.2.2预创建分区默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regionsHBase照region分区情况,在集群内做数据的负载均衡。5.2.3列族数量不要在一张表里定义太多的columnfamily。目前Hbase并不能很好的处理超过2~3个columnfamilycolumnfamily在flush的时候,它邻近的columnfamily也会因关联效应被触发flush,最终导致系统产生更多的I/OHBase表中创建一个列族即可。5.2.4可配置的数据块大小HFile数据块大小可以在列族层次设置。这个数据块不同于HDFS数据65,53664KBHFile数够加载更多HFile为更大的值。相应地索引变小,你将在随机读性能上付出代价。5.2.5数据块缓存把数据放进读缓存,但工作负载却经常不能从中获得性能提升。例如,介意Get或Scan花费时间是否有点儿长。在这种情况下,你可以选择多缓存给其他表和同一表的其他列族使用。5.2.6激进缓存你可以选择一些列族,赋予它们在数据块缓存里有更高的优先级(LRU用得上。IN_MEMORY参数的默认值是false。因为HBase除了在数据块缓存里保践中设置为true不会变化太大。HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中。5.2.7布隆过滤器(Bloomfilters)该读取的HFileHFile数据块的默认大小是64KB,这个大小不能调整太多。10064KB的数据块包含(64*1024)/100=655.53=~700不存在,或者存放在另一个HFile里,甚至在MemStore里。这些情况下,从硬盘读取数据块会带来IO开销,也会滥用数据块缓存。这会影响性能,尤其是当你面对一个巨大的数据集并且有很多并发读用户时。符时先使用同样的反向测试。帮助你榨干系统的性能潜力。你可以在列族上打开布隆过滤器,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',BLOOMFILTER=>'ROWCOL'}BLOOMFILTER参数的默认值是NONE。一个行级布隆过滤器用ROW打开,列标识符级布隆过滤器用ROWCOL打开。行级布隆过滤器在数据块里检体是否不存在。ROWCOL布隆过滤器的开销高于ROW布隆过滤器。5.2.8生存时间(TTL)模,所以传统上数据库内建了许多灵活处理办法。例如,在TwitBase放到平面文件里。HBase可以让你在数秒内在列族级别设置一个TTL。早于指定TTL值的早于设定TTL的版本会被删除。你可以关闭TTL或者通过设置其值为INT.MAX_VALUE(2147483647)来让它永远打开(这是默认值)。你可以在建表时设置TTL,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',TTL=>'18000'}该命令在colfam1列族上设置TTL为18,000秒=5小时。colfam1里超过5小时的数据将会在下一次大合并时被删除。5.2.9数据压缩HFile可以被压缩并存放在HDFS上。这有助于节省硬盘IO,但是读写数据时压缩和解压缩会抬高CPUCPU利用率有限制要求的情况下,有可能会关闭压缩特性。HBase可以使用多种压缩编码,包括LZO、Snappy和GZIP。LZO[1]和Snappy[2]Snappy由Google在2011布不久Hadoop和HBase项目开始提供支持。在此之前,选择的是LZO编码。Hadoop使用的LZO原生库受GPLv2版权控制,不能放在Hadoop和Hbase的任何发行版里;它们必须单独安装。另一方面,Snappy拥有BSD许可(BSD-licensed),所以它更容易和Hadoop和HBase发行版捆绑在一起。LZO和Snappy的压缩比例和压缩/解压缩速度差不多。当建表时你可以在列族上打开压缩,如下所示:hbase(main)>create'mytable',{NAME=>'colfam1',COMPRESSION=>'SNAPPY'}注意数据只在硬盘上是压缩的。在内存里(MemStore或BlockCache)或网络传输时是没有压缩的。族的压缩编码,直接做就可以。你需要更改表定义,设定新压缩编码。HFileHFile被合并后才能从集群中删除老编码函数库。5.2.10数据分割在HBase中,数据在更新时首先写入WAL日志(HLog)和内存(MemStore)MemStoreMemStore会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flushStoreFile会在zookeeper中记录一个redopoint持久化了(minorcompact)。StoreFileHbase的更新Store中的StoreFile达到一定的阈值(majorcompact)key的修改合并到StoreFileStoreFile的大小达到一定阈值后,又会对StoreFile进行分割(split),等分为两个StoreFile。Store中全部的StoreFile和MemStore,将它们按照rowkey进行合并,由于StoreFile和MemStore都是经过排序的,并且StoreFile带有内存中索引,通常合并过程还是比较快的。majorcompactrowkey的修改进行合并形成一个大的St

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论