• 《OD学HBase》20160820


    一、案例

    微博:

    微博内容:

    关注用户和粉丝用户: 添加或移除关注用户

    查看关注用户的微博内容

    微博数据存储:

    响应时间 秒级 无延迟

    (1)mysql分布式 

    (2)hbase数据库

    使用HBase数据库实现微博系统数据的存储

    表的设计:

    命名空间:weibo

    1. 微博内容表

    TableName: weibo:weibo-content

    RowKey:用户ID_timestamp

    列簇:cf

    列标签: cf:content,cf:title,cf:photo

    版本设计:只需要保留一个版本

    2. 用户关系表

    TableName: weibo:relations

    rowkey: 用户iID

    列簇:

    attend 关注用户

    fan 粉丝用户

    列标签:使用用户ID作为列标签,值为用户ID

    rowkey   attend          fan 

    0001       attend:0002=0002           fan:0004=0004

                  attend:0003=0003           fan:0004=0004

    版本设计:只需要保留一个版本

    3. 用户微博内容接收邮件箱表

    TableName: weibo:receive-content-email

    Rowkey:用户ID

    列簇:cf

    列标签:

     直接使用用户ID,vlaue值取微博内容的rowkey

    版本设计:设置最大版本为1000

    rowkey  cf

    00001  cf:0002=0002_2132455

         cf:0002=0002_2132456

    1)rowkey设计:

    (1)唯一性

    (2)长度: 最大64kb。rowkey是hbase中表数据冗余产生的因素

    10~100 字节

    最好 8字节 16字节 64位操作系统

    (3)散列原则:

    假如 时间戳_用户ID 作为rowkey

    10亿用户同时发微博,

    1456777_000001

    1456778_000002

    1456778_100000

    问题: 集中到某个region,造成这单独几个region负载量偏大,而其他region完全没有负载

    散列: 尽量将某一时刻内的数据均衡分散到所有Region中(大部分Region)中

    热点现象:数据在某一个时刻集中存储到某一两个Region上

    rowkey设计规范;

    方便查询,尽可能讲查询字段放到rowkey,HBase根据rowkey查询速度是最快。

    2)列簇设计:

    HBase面向列簇存储

    region起始rowkey --- 终止rowkey范围内一个列簇下的数据

    hdfs上的一个文件  

    StoreFile === HFile

    跨列簇查询,速度相对较慢

    一般设计一到两个列簇

    HBase中的缓存

    memstore: 写缓存

    blockcache:块缓存,读缓存

    HBase表单元格版本号:插入数据的时候如果没有单独制定,系统默认使用时间戳作为版本号。也可以自己制定时间戳。

    Get查询单行记录,Scan查询多行记录

  • 相关阅读:
    web前端技术社区分享
    programming-challenges Shoemaker's Problem (110405) 题解
    caffe 训练測试自己的数据集
    BootStrap有用代码片段(持续总结)
    H5学习_番外篇_PHP数据库操作
    WPF-MVVM-Demo
    android Toast大全(五种情形)建立属于你自己的Toast
    Java
    记一次死锁问题的排查和解决
    一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5790225.html
Copyright © 2020-2023  润新知