HBase数据管理/寻址机制以及行键设计

1、hbase对数据的管理机制

1.1、hbase中的表很大---bigtable,都是分布式存储在集群的各个regionserver上
    1.2、分布式存储时,需要对表进行切分,首先是按行切分成若干个hregion
    1.3、表的每一个hregion都会被一个regionserver所管理
    1.4、每一个hregion随着插入数据的增多,一旦达到一个阈值,会被regionserver分裂成两个
    1.5、在一个hregion内部还会被按照列族切分成若干个store单元
    1.6、每一个store又会被切分成若干个store file(HFile)存储到hdfs文件系统中
    1.7、每一个store对象中会维护一个内存缓存 memstore,用户查询数据时首先会去memstore中进行命中
    1.8、客户端往表中插入数据,首先会在hlog日志中进行记录,然后定期进行flush合并

2、hbase寻址机制 

文件:

.META.:记录表名、hregion起始行键(rowkey)、RS主机名等信息

-ROOT-:记录.META.的region的起始行健等信息(位置信息记录在zookeepr中)

寻址过程:client -> -ROOT- -> .META. -> RS ->region -> rowkey

缓存机制:通过寻址过程找到rowkey后缓存到客户端本地,以便下次查询增快速度

3、行键设计技巧

问题描述:在查询符合某种描述的用户时,例如:查出姓“张”的所有用户或者根据年龄范围查询,hbase不像一般的RDBMS可以随便建立索引(分布式建立二级索引不是很容易,非常复杂),无法对rowkey以外的字段建立索引

行键设计:通过上面的问题引出做行键设计的必要,在做表设计时可以将需要经常过滤的关键字、重要的信息放在行键里面,例如:rk00001-zhang-18-beijing

注意:

行键支持64KB大小

hbase自动对行键按字典排序,所以设计时尽量让连续数据排在一起,以便范围查询时可提高效率。

4、hbase二级索引

4.1、用solr对hbase中的信息建立全文索引

4.2、使用coprocessor机制

时间: 2024-10-10 02:15:27

HBase数据管理/寻址机制以及行键设计的相关文章

HBase里的优秀行键设计

我们通过行键访问HBase.尽管使用扫描过滤器可以一次性指明大量的键,但是HBase仅仅能够根据行键识别出一行. 优秀的行键设计可以保证良好的HBase性能. 1.行键存在于HBase中的每一个单元格中.如果行键越长,用于存储单元格的I/O开销就会越大.通常我们采用MD5加密的定长键来代替行键. 2.对于组合式行键,每个组件的排序顺序取决于访问模式 如果是一个以主机名和事件类型存储的日志数据库,可能的键值选取方法有以下几种: [主机名][事件类型][时间戳] :适用于访问模式使用主机名和事件类型

HBase应用开发回顾与总结系列之二:RowKey行键设计规范

2. RowKey行键设计规范 2.1. RowKey四大特性 2.1.1 字符串类型 虽然行键在HBase中是以byte[]字节数组的形式存储的,但是建议在系统开发过程中将其数据类型设置为String类型,保证通用性:如果在开发过程中将RowKey规定为其他类型,譬如Long型,那么数据的长度将可能受限于编译环境等所规定的数据长度. 常用的行键字符串有以下几种: 纯数字字符串,譬如9559820140512: 数字+特殊分隔符,譬如95598-20140512; 数字+英文字母,譬如city2

MySQL主键设计

原文:MySQL主键设计 [TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主键应该是单列的,以便提高连接和筛选操作的效率 永远也不要更新MySQL主键 MySQL主键不应包含动态变化的数据,如时间戳.创建时间列.修改时间列等 MySQL主键应当有计算机自动生成. 主键设计的常用方案 自增ID 优点: 1.数据库自动编号,速度快,而且是增量增长,聚集

FrameWork数据权限浅析2之基于用户级别的中间表机制实现行级数据安全

在上一篇笔记中我已经说了如何利用FM自带的机制配合我们已经通过验证的用户空间的组来实现行级数据安全的控制,但是由于上一个方法存在的缺点是以后如果对该对象增加基于用户或者角色的访问权限就需要开发人员去FM模型添加操作,这样就大大的增加了我们系统的维护成本,下面我们就来说一下另外一种方法:基于用户级别的中间表机制实现行级数据安全 ps:这种方法命名只是笔者的一种定义说法,属个人想法而已,各位千万不要拿来铭记,重要的是过程,至于名字,就让他随风飘吧. 下面我们就走入正题,如何利用基于用户级别的中间表机

数据库主键设计之思考(转)

在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来. 主键的必要性: 有些朋友可能不提倡数据库表必须要主键,但在我的思考中,觉得每个表都应该具有主键,不管是单主键还是双主键,主键的存在就代表着表结构的完整性, 表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除,当我们没有主键时,这些操作会变的非常麻烦. 主键的无意义性: 我强调主键不应该具有实际的意义,这可能对于一些朋友

MySQL主键设计盘点

目录 主键定义 主键设计和应用原则 主键生成策略 自增ID UUID 自建的id生成器 Twitter的snowflake算法 @ 最近在项目中用了UUID的方式生成主键,一开始只是想把这种UUID的方式生成主键记录下来,在查阅资料的过程中,又有了一些新的认识和思考. 主键定义 唯一标识表中每行的一个列(或一组列)称为主键.主键用来表示一个特定的行. 主键设计和应用原则 除了满足MySQL强制实施的规则(主键不可重复:一行中主键不可为空)之外,主键的设计和应用应当还遵守以下公认的原则: 不更新主

hbase寻址机制详解

2019/2/20 星期三 //参考链接为 : https://www.cnblogs.com/qingyunzong/p/8692430.html 系统如何找到某个row key(或者某个row key range(范围))所在的region big table 使用三层类似B+树的结构来保存region 位置第一层是保存zookeeper 里面的文件,它持有root region 的位置.第二层root region 是.META.表的第一个region 其中 保存了.META.z表 其它r

HBase 手动 flush 机制梳理

对应 HBase 版本0.94.1,对照了开源的版本和工作使用的某发行版 问题:在 HBase shell 里面输入 flush 'table_or_region_name'之后,发生了什么?具体的实现是怎么样的?对于现有的某个表,我如何在做操作之前估算 flush 执行的时间? 1. HBase shell 入口 HBase shell 使用 ruby 实现,在 putty 敲hbase shell,调用的是${HBASE_HOME}/bin/hbase这个 bash 脚本,根据shell这个

基于.NET平台的分层架构实战(六)——依赖注入机制及IoC的设计与实现[转]

原文:http://www.cnblogs.com/leoo2sk/archive/2008/06/19/1225223.html 我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用,所以,这里的“松散耦合”实际是指上层类不能具体依赖于下层类,而应该 依赖于下层提供的一个接口.这样,上层类不能直接实例化下层中的类,而只持有接口,至于接口所指变量最终究竟是哪一个类,则由依赖注入机制决定. 之所以这样做,是为了实现层与层之间的“可替换”式设计,例如,现在需要换一种方式实现数据访问层,