识别数据流包头,解析数据流文件,并将解析数据按数据结构体格式命名,并建立对应mysql数据库导入数据。
将建立过程遇到的错误建立对应log。
1,按照api_struct.h中的描述,以月日期+数据类型建立库+exchange_id,以年月日日期建立表,以code为主键存储数据。
struct.h中描述为预留的字段数据库内同样标记为预留。
2,通过exchange_id区分库类型,以标记建立z_、h_开头,(不存在的开头不转换,存在的进行转换)
是否拆分exchange_id建库需在config中提供选项,实际使用中会建立两种库,一种拆分,一种不拆分。
3,程序以文件夹便利方式入库,入库数据源文件名为20220115082559.dat,根据年月日拆分具体日期。
入库需做好基本判断,不限于如数据库是否已经存在、dat不存在、dat被意外删除、表不存在、等debug错误,自行做好适配除虫。任何错误记入log。
文件夹中有很多日期dat,但数据库中已经存在日期的dat不做处理,仅对新增dat做处理。每日便利该文件夹。
不以静态存储已处理过的方式对已处理的dat做判断,需在每次导入前进行是否应导入检查,并将此项目放入config自定义配置。
数据库、表结为自动建立。
4,对dat处理之前需做出基本判断,例如,数据库中是否已有对应日期,dat的大小是否符合设定值。如正在copy中未完成的显然是不合适进行读取处理的。
5,上面几点所描述,
导入前需要对dat做出包括日期、数据库中是否存在的基本判断,以及其它必要判断。
在导入过程中也需要做出判断,其中包括基本的code判断,exchange_id的的判断。
以及对于不同exchange_id的channel_no中id连续性的判断。对于不连续的id需在最终导入log中做出遗漏说明。
6,config中配置自定义包头,包头结构为header(8)小端序,后期包头后增加12位日期,需预留。
7,dat容量为每日70G左右,ssd环境下导入数据库时间必须 <= 14分钟,即不高于每2分钟导入1GB数据。
同日数据可能需要考虑使用多线程处理不同的数据类型以达到此速度。例,读取线程1,不同类型插入线程数据N。
8,具体数据库命名、日志、config具体配置格式以最终协调为准。
程序将每日通过任务计划调用,提供ubuntu 20和win编译。
仅允许使用stl基本库进行开发,除非事先讨论声明经过允许,不得借助任何第三方库。代码按段落注释,编写开发文档。
以git源代码方式交付,以审核源代码质量为项目结束,基本的代码质量、注释量。非必要thread sleep,sleep的方式不被允许。