数据库是我们在学习后端编程开发的时候需要掌握的重要技术之一,而今天我们就一起来了解一下数据库中的数据迁移架构原理都有哪些。
并发转换和迁移数据: 原有的HiTSDB数据点已经在写入的时候进行了分片。默认有20个Salts。数据迁移工具会对每个Salt的数据点进行并发处理。 每个“Salt”都有一个Producer和一个Consumer。Producer负责开启HBase Scanner获取数据点。 每个Scanner异步对HBase进行扫描,每次获取HBASE_MAX_SCAN_SIZE行数的数据点。然后将HBase的Row Key转换成新的结构。
后将该Row放到所有的一个Queue上等待Consumer消费。 Consumer每次会处理HBASE_PUT_BATCHSIZE或者HBASE_PUT_MIN_DATAPOINTS的数据量。 每次Consumer顺利写入该Batch的时候,我们会在UID表中记录对应“Salt”的数据处理位置。 这样便于故障重启时Producer从后一次成功的地方重新开始获取数据点进行转换。 数据迁移工具对HBase的操作都采用异步的读写。当扫描数据或者写入数据失败的时候,我们会进行有限制的尝试。 如果超出尝试次数,我们就终止该“Salt”的数据迁移工作,其他”Salt“的工作不受到任何影响。 当下次工具自动重启时,我们会出现问题的”Salt“数据继续进行迁移,直到所有数据全部顺利转换完成。
流控限制: 大部分情况下,Producer对HBase的扫描数据要快于Consumer对HBase的写入。 为了防止Queue的数据积压对内存造成压力同时为了减少Producer扫描数据时对HBase的压力,我们设置了流控。 当Queue的大小达到HBASE_MAX_REQUEST_QUEUE_SIZE时候,Producer会暂时停止对HBase的数据扫描等待Consumer消费。 当Queue的大小减少到HBASE_RESUME_SCANNING_REQUEST_QUEUE_SIZE时候,Producer会重新恢复。
Producer和Consumer进程的退出
顺利完成时候如何退出: 当一切进展顺利时候,当Producer完成数据扫描之后,会在Queue上放一个EOS(End of Scan),然后退出。 Consumer遇到EOS就会知道该Batch为后一批,成功处理完该Batch之后就会自动退出。
失败后如何关闭: Consumer遇到问题时:当Consumer写入HBase失败之后,consumer会设置一个Flag,然后退出线程。 每当Producer准备进行下一个HBASE_MAX_SCAN_SIZE的扫描时候,他会先检查该Flag。 如果被设置,他会知道对应的Consumer线程已经失败并且退出。Producer也会停止扫描并且退出。 Producer遇到问题时:当Producer扫描数据失败时,处理方式和顺利完成时候类似。都是通过往Queue上EOS来完成通知。 下次重启时,Producer会从上次记录的数据处理位置开始重新扫描。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!