Hbase 谈资 特点 - 高可靠性 - 高性能 - 面向列 - 可伸缩 - 实时读写 - 分布式 底层用字节数组存储 与关系型数据库对比 关系型数据库的优点 - 容易理解 - 使用方便 - 易于维护 关系型数据库的瓶颈 - 高并发读写需求 - 海量数据的读写性能低 - 扩展性和可用性差 rowkey设计 案例 通话记录的存储与查询 rowkey:手机号+(Long.Maxvalue-时间戳) 微博案例 角色权限 部门子部门 原则 长度原则 定长 越小越好 2的幂次方 散列性 取反 hash 高位随机串 唯一性 保证key的唯一 根据实际业务来 protobuf 提供了自动生成java类的功能 java类,提供了对象的序列化和反序列化 存储模型 row key - 不能重复 - 字典顺序排序 - 只能存储64k的字节 列族 不大于3个 列名 以列族作为前缀 可动态加入 celll单元格 可动态加入 字节数组 时间戳 - 默认是1 - 时间倒序排序,最新最前 - 64位整型 - 默认精确到毫秒,可以主动设置 Hlog (wal log) HLogkey 数据归属信息 - table - region - sequence number - timestamp value - 就是hbase的 keyvale对象 API操作 查询 new Get(key) new Scan [startrow,endrow) table.get(List(Get)) filter PrefixFilter 前缀过滤器 KeyOnlyFilter 只返回行,不返回column值 InclusiveStopFilter 扫描到这一行停止 FirstKeyOnlyfilter 扫描到每一行的第一列返回 ColumnPrefixFilter 筛选出前缀匹配的列 ValueFilter SkipFilter ColumnCountFilter 每行最大返回多少列 SingleColumnFilter 插入 new Put(rowkey) table.put(List(Put))批量插入 删除 new Delete 架构 namespace client master - 负责负载均衡 - 发现失效region server 重新分配region 为region server 分配region 管理客户端对表单增加,删除,修改(DDL) Region server 维护region region 对应一张表 store 对应一个列族 memstore 溢写会生成stoefile 多个列簇任何一个溢写会触发本server上的所有memstore溢写,浪费IO zookeeper - 保证集群只有一个master - 存储 region的寻址入口 - 监控regionserver的上线下线信息,并通知master 存储了hbase的源数据信息 Hlog 优化 热点问题 rowkey设计有问题 对rowkey打撒 预分区 Column Family 某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O In Memory 创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到RegionServer的缓存中,保证在读取的时候被cache命中 MaxVersion time to Live 设置数据生命周期,过期自动删除 compact & split minor compact major compact 二级索引 es+hbase 也可以做分页 写表操作 多HTable并发写 参数设置Auto Flush