zoukankan      html  css  js  c++  java
  • HBase存储方案设计

    需求描述

    将数据记录持久化存储在HBase中,需要支持如下功能:

    1. 支持高吞吐量读写操作,实时采集10,000条/秒;
    2. 支持动态添加字段;
    3. 支持服务端过滤;
    4. 支持部分字段修改。

    设计方案

    按列存储

    优点

    1. 扩展性好,支持动态添加新列;
    2. 支持服务端按列过滤;
    3. 可读性好,方便调试;
    4. 获取少量列数据时,读取数据少,节约网络带宽资源;
    5. 方便修改部分列值。

    缺点

    1. 占用磁盘空间较多;
    2. 数据采集性能差。

    列合并为JSON格式存储

    优点

    1. 相对方案1,减少数据列,节约磁盘空间;
    2. 相对方案1,数据读、写性能较好;
    3. 扩展性好,支持动态添加新列;
    4. 相对方案3数据可读性好,方便调试;

    缺点

    1. 不便于服务端按列过滤;
    2. 数据只能整体获取,当获取少量列时也需要将整个json对象获取,对磁盘和网络资源造成浪费;
    3. 不便于修改部分列值,需要整体反序列化替换修改值后再重新序列化后写入。

    列合并为PB格式存储

    优点

    1. 相对方案1,减少数据列,并通过PB格式对数据压缩,节约磁盘空间;
    2. 数据读、写性能好。

    缺点

    1. 扩展性差,添加新列时需要修改PB对象;
    2. 不支持服务端按列过滤;
    3. 数据可读性差,不方便调试;
    4. 数据只能整体获取,当获取少量列时也需要将整个PB对象获取,对磁盘和网络资源造成浪费;
    5. 不便于修改部分列值,需要整体反序列化替换修改值后再重新序列化后写入。

    批量写入性能对比

    单线程连续批量发送100万条过车记录(每条记录37个字段,每批10000条记录),三种方案完成数据采集总耗时对比结果如下:

    图3_1 HBase批量写入性能

    批量读取性能对比

    单线程批量读取100万条过车记录(每条记录37个字段,每批10000条记录),分别从非压缩表和Snappy压缩表读取记录并执行反序列化操作(按列存储格式的读取性能表示从result中获取属性值的时间消耗),记录每种存储格式的总耗时与反序列化耗时情况,图4_1对应非压缩表的测试结果,图4_2对应Snappy压缩表的测试结果:
    注:

    1. 读取部分列测试只获取tfs_id,plate_image_path,image_path三列;
    2. 按列存储的测试数据中红色部分表示从result中获取字段的时间消耗。


    图4_1 HBase非压缩表批量读取性能

    图4_2 HBase snappy压缩表批量读取性能

    存储空间占用对比

    单线程连续批量发送100万条过车记录(37个字段),三种方案存储空间占用对比结果如下(下图数据表示一份数据的空间占用情况,不包括副本大小):

    图5_1 HBase存储空间占用情况

  • 相关阅读:
    前端响应式开发
    前端兼容性问题解决方案(二)
    web storage
    flex布局 滚动条失效
    ant-design-vue form表单 defaultValue默认值
    node express 中间件 http-proxy-middleware 和 express-http-proxy 转发 搞定 post 超时
    Math.min & Math.max & apply
    Backbone源码分析-noConflict
    安卓下浏览器(包括微信)video 小窗口播放
    前端工作流
  • 原文地址:https://www.cnblogs.com/warmingsun/p/7000227.html
Copyright © 2011-2022 走看看