基于HBASE的批量数据更新及数据一致性保障方法的研究
作者:皇甫涛,龙凤,王凡
来源:《中国新通信》 2018年第9期
    【摘要】 本文介绍一种基于HBASE 的批量数据更新及数据一致性保障方法,既保证HBASE 数据库与外部系统的数据一致性、又能实现批量数据更新,保证处理效率。
    【关键字】 HBASE 批量更新 数据一致性
    一、背景
hbase属于什么数据库    HBASE 是建立在Hadoop 文件系统之上的分布式面向列的数据库,供用户快速随机的访问海量结构化数据,在实际的应用中,往往需要对批量数据进行实时更新修改,传统的HBASE 数据批量更新方法,无法保证HBASE 数据库与外部系统的一致性。
    二、传统HBASE 数据处理方法
    以运营商HBASE 话单数据库为例介绍传统的HBASE 数据库批量更新数据的方法:
    1、HBASE 首先进行大规模数据抽取,外部系统对抽取出的数据进行处理。
    2、HBASE 根据处理的结果,判断删除哪些话单数据。
    3、将外部系统处理后的新数据插入HBASE 数据库中。
    如果采用实时同步接口逐条话单进行,可以保证外部系统和HBASE 的数据一致性,但上亿条话单的逐条操作效率低下;
    如果采用批量操作,则存在外部系统已处理完相关数据,但HBASE 数据处理延迟,导致数据不一致。
    三、技术方案
    本文采用一种新方法解决上述数据不一致问题。在传统HBASE 数据库中,构建一个HBASE 数据库表的片段数据,实现与外部关系型数据库的各种事务操作,同时设置一个同步开关表,在进行大批量数据异步更新时,打开同步开关。
    HBASE 查询应用根据同步开关的指示确认是否需要构造一致性读或进行排重,如需要构造一致性读,则在查询完HBASE 数据库表后,再到关系型数据库中查询是否有对应片段表;如需要构造一致性读且进行排重,则在读取HBASE数据库表后,在读取片段表时判断重复记录,完成查询结果合并展示。
    本技术实现的逻辑与物理结构如下,以用户GPRS 话单批量异步删除为实例进行说明:
    1、批量数据抽取程序先把同步开关表中表名为A 的记录的同步标识置为1,并从HBASE数据库的A 表中,根据条件抽取数据到ACID 数据库的片段表A’中, 同时删除A 表中对应记录。
    2、外部程序根据A’表的数据与外部系统表进行带有事务性质的关联集合数据运算,并对完成运算的A’表中的数据标志进行修改,插入置为1,修改置为2,删除置为3。
    外部程序在完成所有与A’片段表的数据处理后,把同步状态表中A 对应记录的状态置为2,通知异步回写程序回写HBASE 数据库。
    3、HBASE 查询程序先判断要查询表A 的同步标识,为0,则直接查询A 表获取数据并返回;为1,则构造一致性读,在查询完A 表后,继续查询A’表,获取数据完成合并后返回;为2,表示A’表的数据在进行回写,此时不但要构造一致性读,还需要进行数据排重,排重后返回数据。
    4、当A 表对应记录为2 时,表示外部程序已经完成相关工作,异步回写程序开始回写操作,把A’表中标识为1和2 的数据插回A 表中,将A 表在同步开关表中对应记录状态至为0,同时清空A’表数据。
    四、总结
    本文介绍的方法既保障了HBASE 数据库与外部系统的数据一致性、又能实现异步批量数据更新,保证处理效率。此方法适用于对数据一致性要求高、对大批量数据更新处理时效要求高、但又不具备ACID 功能的数据库实时应用场景,如HBASE 数据库,具备通用性和很高的应用价值。