基于HBase的工业大数据存储实战物品追踪与管理中的三种常见现场总线技术
随着工业4.0时代的到来,工业互联网和企业的智能化、信息化都将不断推进,传统的工业实时数据库和关系数据库已经难以完全胜任工业大数据的存储,以HBase为代表的NoSQL数据库正在蓬勃发展,其完全分布式特征、高性能、多副本和灵活的动态扩展等特点,使得HBase在工业大数据的存储上拥有强大的优势,打破了流程工业生产中的数据壁垒效应,促进了生产水平和管理水平的大幅提升。本期格物汇,就来给大家介绍HBase数据库及格创东智相关实战案例。
了解HBase
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。它利用Hadoop HDFS作为其文件存储系统,将海量数据处理能力通过MapReduce框架实现。与Google Bigtable不同的是,HBASE使用Zookeeper作为协同服务,而不是Chubby。此外,尽管两者都是基于Bigtable设计,但它们在实现细节上有所差异。
与传统数据库相比,HBASE具备多重优势:线性扩展能力,可以根据需求增加节点;通过Distributed File System(如HDFS)进行备份机制设计;利用Zookeeper提供的一致性服务提高访问速度。
HBase实战案例
为了更好地理解如何在人工智能场景中应用HBase,我们将以某半导体显示企业为案例分析格创东智大数据团队是如何利用HBase快速查找面板特征系统。
业务场景描述
该公司涉及大量面板相关特征数据,每张面板约3.2k字节,并且被分组,每个面板属于一个或多个组。群组间面的分布如下:
大约43%的小组只有1张面板。
大约47%的小组含有2到9张面板。
剩余小部分小组包含10到10000张面的数量范围广泛。
业务需求
现有的业务需求主要包括两个方面:
根据每个小组ID查询该小组下所有面的信息。
根据小组ID加上具体面的ID查询单一对应于此ID的小型版块详情信息。
原有方案:MySQL + OSS (对象存储)
之前由于业务量较小时,用到的主要是MySQL以及OSS(对象存储)。相关表主要包括“group”表(用于保存每个小分队及其成员数目)和“face”表(用于保存每一个版块及其详细信息)。
表结构说明
group表:
+ group_id (大小12)
glass表:
+ glass_id (大小12)
+ group_id (大小12)
+ feature_TB_7B_3695BA051CASBA (3.2k, 二进制格式base64编码后的真实版块特征值)
实际问题与解决方案
原来的设计存在两个问题:
每个版本需要创建很多行记录,即使它们属于同一份文件,这导致了后续操作需要访问两个不同的资源库。
MySQL不支持动态列属性,所以虽然可以用这个方式组织这些内容,但仍然不能直接从内核中获取关于哪些由相同分辨率形成的一系列图像真正属于同一类别的问题列表。这意味着对于具有非常庞大而又复杂结构的人工智能应用来说,不仅无法优雅地运行,而且实际操作时间也会非常长,有时候可能达到十秒钟以上,对于当前快速增长的事业来说,这种延迟是不允许接受的情况。
HBASE解决方案
为了解决这些挑战,我们决定采用一种名为MOB(Medium-Sized Object)功能,它适用于那些介于文档、小视频图片之间但又不超过10MB大小并且读写要求极高同时检索能力强且易于扩展性的特殊情况。在这种情况下,由于是这样一些情境,因此我们选择使用hbase MOB功能来代替原来使用OSS这样的方法去处理这些类型的事情。因此,在这里我们就要看看为什么我们的团队选择hbase而非直接使用OSS,因为他们认为hbase能够提供更好的处理效率,以及它更加适合我们的实际应用场景:
hase可以做到支持无限行数但有限列数,可以减少空间浪费,同时提高查询效率;
hase支持事务安全保证用户最终看到的是正确结果;
hase支持高级搜索功能,比如全文搜索或者几何形状搜索等;
总结一下,上述分析过程中提到了以下几个关键点:
1. 使用前缀查找算法进行简单快捷地过滤器设置;
2. 设计时考虑了预定义命名空间/名称空间/名称空间控制;
3. 创建基于columnFamily(列簇)’s name'’s prefix'’s prefix-name-and-type'’s prefix-name-and-type-value’s value's column-family name’s value's column-family name’s value's column-family name's value's cionnion-name-and-type-values-of-columname-andtype-values-of-columnfamily-name-andtype-values-of-columnameandtypvaluesofcolumfamilynameandtypevalue-s-value-of-colum-familiy-namedeclared-in-the-create-table-statement-but-not-found-in-the-get-or-scancolumnfamilystatement-that-is-executing-on-this-hbase-table-but-is-not-foundin-the-get-or-scancolumnfamilystatement-that-is-executing-on-this-hbasetable-butisnotfoundinthegetor-scancolumnfamilystatementshatexecutesonthishbashtablebutisnotfoundinthegetorscanstatementshatexecutesonthishbashtablebutisnotfoundinthegetorscanstatementsthats