01
技术背景
每种数据库为了能够快速导入数据,一般都有自己的批量加载方法,根据自己的特点,快速将数据读入内存,组装为适配自身的二进制格式,往往还能提供直接写入的方式进一步加快吞吐量。Vastbase在针对此类场景有独特创新
Vastbase数据库现有多线程架构
02
技术方案
既存难题
当用户不断产生大量待导入数据库的文本文件,需要尽快加载至数据库,避免发生堆积而可能导致的磁盘耗尽,最终严重影响系统的可用性。
现代计算机拥有多路、多核、大内存等资源,我们需要充分利用,将它们压榨到极致产生最高的处理速度。
来自于用户的文件大小和数量无法预知,如何根据用户的文件数据源拉起合适数量的加载线程,并且让各线程做到尽可能同时结束,让加载全程保持一个比较稳定的速度,是本发明解决的主要问题。
即使是比较理想的状态,文件大小均匀,数量恰好是预期加载线程数的整倍数,也会因为受线程资源影响,某个或某几个线程晚于其他线程结束,导致这段时间内无法发挥多线程加载的优势,拉低整个加载过程的平均速度。
因此,为实现整个过程中加载速度曲线的稳定平滑,既要提前对用户提供的数据源文件集进行规划,合理分配到多个加载线程,又要在加载过程中实时监控各线程的加载进度,动态调整达到基本一起结束的目的。
从文本文件读取数据并加工成Vastbase数据库支持的二进制格式,是本系统主要的工作内容。加载性能主要存在两个瓶颈,一是由文本文件读入并按规则正确拆分文本,二是将拆分完毕的文本转换为Vastbase数据库要求的二进制格式。很明显,第二种操作依赖于前一种,拆分带来的提升有限,并不能满足速度要求。
因此我们选用的方案是,尽可能多的启动多个Vastbase线程,每个Vastbase线程负责一个文件的读取、导入和转换,这样可以同时处理一批文件,提升性能满足速度要求。
加载线程示意图
系统整体示意图
1
加载开始时,根据文件数量和系统资源拉起(LaunchBackgroundWorkers)足够多的加载线程。
2
多线程加载文件;
1) 读取文件数据至内存
2) 在内存中分析和拆分文本数据
3)将拆分后的文本数据转换为Vastbase能够接受的二进制格式
3
每个线程的输出直接传递至Vastbase数据库。
4
线程生命周期结束(BgworkerListSyncQuit)。
03
技术效果
本系统利用贪心算法,将多文件的数据尽可能平均的分配到每个线程当中,通过启用多线程加载文件,在负载尽可能平均的前提下,让它们其中的每一个都在解析并产生数据,充分利用每一个CPU核心和存储的读取能力,实现高速加载的目的。
• END •
关于海量数据
北京海量数据技术股份有限公司(股票代码:603138.SH)成立于2007年,是国内首家以数据库为主营业务的主板上市企业。公司十余年来秉承“专注做好数据库”的初心,始终致力于数据库产品的研发、销售和服务。核心产品海量数据库Vastbase系列、数据库一体机Vastcube系列、海量大数据Datalink系列,全栈国产化,应用满足度高,目前广泛应用于政务、制造、金融、通信、能源、交通等多个重点行业,已成为国产企业级数据库的首选之一。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!