需求描述

将数据记录持久化存储在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存储空间占用情况

HBase存储方案设计的更多相关文章

  1. 用Hbase存储Log4j日志数据:HbaseAppender

    业务需求: 需求很简单,就是把多个系统的日志数据统一存储到Hbase数据库中,方便统一查看和监控. 解决思路: 写针对Hbase存储的Log4j Appender,有一个简单的日志储存策略,把Log4 ...

  2. HBase存储剖析与数据迁移

    1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储.所以,对于结构化的SQL语言查询,HBase自身并没有接口支持.在大数据应用中,虽然也有SQL查询引擎可以查询H ...

  3. hbase 存储结构和原理

    HBase的表结构 建表时要指定的是:表名.列族 建表语句 create 'user_info', 'base_info', 'ext_info' 意思是新建一个表,名称是user_info,包含两个 ...

  4. HBase存储架构

    以下的介绍是基于Apache Hbase 0.94版本: 从HBase的架构图上可以看出,HBase中的存储包括HMaster.HRegionServer.HRegion.Store.MemStore ...

  5. Hbase存储详解

    转自:http://my.oschina.net/mkh/blog/349866 Hbase存储详解 started by chad walters and jim 2006.11 G release ...

  6. 一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询

    一种安全的云存储方案设计(未完整理中) 一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了.仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵. 这几年来,云产品层出不穷,但其安全性 ...

  7. HBase存储及读写原理介绍

    一.HBase介绍及其特点 HBase是一个开源的非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDF ...

  8. hbase存储优化

    1.上面的2张图主要说明hbase的存储特点 (1).每个值(每条记录的每一个列的值)的存储,都完整的存储了rowkey.column family.column.版本(时间戳),以及该列的值. 这样 ...

  9. 爬虫代码实现四:采用Hbase存储爬虫数据(2)

    导入hbase的jar包,在maven仓库找:进入http://mavenrepository.com/,输入hbase client,选择apache hbase client, 点击进入,选择 点 ...

随机推荐

  1. 下载SCI论文

    今天帮汪博下了一下午SCI论文,见到了很多不知道的网站.顺便了解了一下: 首先进学校图书馆的网站,然后选择    WOS核心合集(含SCIE.SSCI.A&HCI.CPCI数据库) ---&g ...

  2. Drools学习笔记

    Drools是一款基于Java的开源规则引擎 实现了将业务决策从应用程序中分离出来. 优点: 1.简化系统架构,优化应用 2.提高系统的可维护性和维护成本 3.方便系统的整合 4.减少编写“硬代码”业 ...

  3. Linux学习之十六-Linux用户管理

    Linux用户管理 Linux系统跟Windows系统一样,可以创建不同的用户,不同的用户组.在不同用户下使用系统具有相应的权限 创建一个普通用户时,会修改几个文件,拷贝一些初始文件到用户家目录中 修 ...

  4. Android开发之布局文件里实现OnClick事件关联处理方法

    一般监听OnClickListener事件,我们都是通过Button button = (Button)findViewById(....); button.setOClickLisener....这 ...

  5. Win7如何自定义鼠标右键菜单 添加用记事本打开

    鼠标右键用记事本打开.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Notepad] @="用记事本 ...

  6. csdn开源夏令营-ospaf中期报告

    1.背景         随着将中期的代码托管到CSDN的平台上,ospaf(开源项目成熟度分析工具)已经有了小小的雏形.当然还远远不够.       首先还是要感谢这次活动组织方CSDN,感觉挺有G ...

  7. 使用struts2完成ckeditor和图片上传

    代码地址如下:http://www.demodashi.com/demo/12427.html 使用struts2完成ckeditor和ckeditor图片上传 ckeditor版本ckeditor_ ...

  8. Nginx多域名多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了.下面我就来说说server_name的使用吧:ser ...

  9. MySQL 优化、设计规则浅谈

    当数据量大,数据库相应慢时都会针对数据库进行优化.这时都是要针对具体情况,具体业务需求进行优化的. 但是有些步骤和规则应该适合各种情况的.这里综合网上找的资料简单分析一下. 第一优化你的sql和索引: ...

  10. Chrome禁用NPAPI插件(包含 Silverlight、Java 和 Unity)

    过去,很多插件都是使用一种称为NPAPI 的旧系统开发的. 现在,仅仅有少量站点在使用NPAPI 插件,由于这些插件有时会给站点带来安全风险. 为了让用户获得更安全.更高速且更稳定的 Chrome 浏 ...