加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

如何基于日志,同步实现数据的一致性和实时抽取?

发布时间:2021-01-07 23:23:01 所属栏目:安全 来源:网络整理
导读:副标题#e# 《如何基于日志,同步实现数据的一致性和实时抽取?》要点: 本文介绍了如何基于日志,同步实现数据的一致性和实时抽取?,希望对您有用。如果有疑问,可以联系我们。 作者:王东 宜信技术研发中心架构师 目前就职于宜信技术研发中心,任架构师,负责

无论是遇到增删改任何的数据,我们面临的问题都是:

  1. 该更新哪一行;
  2. 更新的策略是什么.

对于第一个问题,其实就需要定位数据要找一个唯一的键,常见的有:

  1. 使用业务库的主键;
  2. 由业务方指定几个列做联合唯一索引;

对于第二个问题,就涉及到_ums_id_了,因为我们已经保证了_ums_id_大的值更新,因此在找到对应数据行后,根据这个原则来进行替换更新.

之所以要软删除和加入_is_active_列,是为了这样一种情况:

如果已经插入的_ums_id_比较大,是删除的数据(表明这个数据已经删除了),如果不是软删除,此时插入一个_ums_id_小的数据(旧数据),就会真的插入进去.

这就导致旧数据被插入了.不幂等了.所以被删除的数据依然保留(软删除)是有价值的,它能被用于保证数据的幂等性.

HBase的保存

插入数据到Hbase中,相当要简单一些.不同的是HBase可以保留多个版本的数据(当然也可以只保留一个版本)默认是保留3个版本;

因此插入数据到HBase,需要解决的问题是:

  1. 选择合适的rowkey:Rowkey的设计是可以选的,用户可以选择源表的主键,也可以选择若干列做联合主键.
  2. 选择合适的version:使用_ums_id_+ 较大的偏移量(比如100亿) 作为row的version.

Version的选择很有意思,利用_ums_id_的唯一性和自增性,与version自身的比较关系一致:即version较大等价于_ums_id_较大,对应的版本较新.

从提高性能的角度,我们可以将整个Spark Streaming的Dataset集合直接插入到HBase,不需要比较.让HBase基于version自动替我们判断哪些数据可以保留,哪些数据不需要保留.

Jdbc的插入数据:

插入数据到数据库中,保证幂等的原理虽然简单,要想提高性能在实现上就变得复杂很多,总不能一条一条的比较然后在插入或更新.

我们知道Spark的RDD/dataset都是以集合的方式来操作以提高性能,同样的我们需要以集合操作的方式实现幂等性.

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!