文档详情

Hbase 表设计.doc

发布:2017-12-14约1.99千字共6页下载文档
文本预览下载声明
HBase与RDBMS的区别在于:HBase的Cell(每条数据记录中的数据项)是具有版本描述的(versioned),行是有序的,列(qualifier)在所属列簇(Column families)存在的情况下,由客户端自由添加。以下的几个因素是Hbase Schema设计需要考虑的问题: 1、 Hbase中没有joins的概念 大表的结构可以使得不需要joins,而解决这一问题。 2、Row keys 设计 主键,在Region里按字母顺序来排序(byte数组存储)。124 12345 写入要分散(不能使用递增的写入),如订单表: order_id做reverse逆排序后做rowkey,以便分布式存储,避免数据只保存在个别节点上。 201101 逆排序后 101102 201102 逆排序后 201102 多条件查询时,设为组合row key,左匹配 注:读取数据只能按row key(及其range)或scan全表扫描,确保查询高效 3、列族CF设计 尽量少,建议CF数量在1-2个。 设计Hbase schema的时候,要尽量只有一个column family。 flush和compaction触发的基本单位都是Region级别。当一个CF有大量的数据的时候会触发整个region里面的其他CF的memstore(其实这些memstore可能仅有少量的数据,还不需要flush的)也发生flush动作; 另外compaction触发的条件是当store file的个数(不是总的store file的大小)达到一定数量的时候会发生,而flush产生的大量store file通常会导致compaction,flush/compaction会发生很多IO相关的负载,这对Hbase的整体性能有很大影响,所以选择合适的column family个数很重要。 案例1、学生表和课程表,多对多 关系数据库中设计: HBase中: Student 表 Row Key CF CF Student_id(reverse逆排序) info course Info:name Course:c1 Info:age Course:c2 Info:sex ...... Course表 Row Key CF CF Course_id(reverse逆排序) info Student Info:title Student:t1=student_id Info:introduction Student:t2 Info:teacher_id ...... 案例2、person 和 身份证card表 关系数据库: Person表 Pserson_id Name sex Card Card表 ID City_id HBase中: Person表 Row Key CF ? info Person_id Info:name Info:sex Info:age Info:card …… 案例2、订单order 和 订单明细表order_item,一对多 关系数据库中: Order表 Order_Id Order_mount User_id City_id …. Order_item 表 Item_Id Order_Id Product_id Unit_price Order_num ….. HBase 中: 方案一: Order表 Row key CF ? info Order_Id Info: Order_mount Info:user_id Info:city_id ….. Order_item 表 Row key CF ? info Order_id-item_id Info: Order_mount Info:user_id Info:city_id Info:order_id ….. 方案二: Order表 Row key CF CF ? info item Order_Id Info: Order_mount Info:user_id Info:city_id Info:create_time ….. Item:i1item_id Item:i2 ….. Order_item 表 Row key CF ? info item_id Info: Order_mount Info:user_id Info:city_id Info:order_id ….. 多条件查询时,需要增加一个index表 Row key为查询条件组合 Row key CF ? info [create_time]_[order_id]_[city_id] Info:order_id
显示全部
相似文档