背景
现有系统中已经有每天定时备份当日成交订单数据到数据库,但是为了数据更安全一些,会单独备份到文件系统上一份,这样可以把2份数据互为备份,如果一侧发现数据丢失,可以去另外一份中去查找丢失的数据。
实现
由于订单数据量比较大,最多的时候每天会有几百几千万条数据,如果把订单数据以字符串形式存储为文本文件的话, 会占用很多的存储空间。为了节省磁盘空间, 写成二进制数据文件会节省部分空间。 java中写二进制文件的话,可以有多种方式, 我采用的是使用RandomAccessFile读写二进制文件流。
首先定义了一些常类。如下;
主要定义了数据类型,方便后面读写使用。
紧接着定义了一个通用的文件头定义,FileStruct,针对每种数据类型都有一个对应的文件对象,主要包括索引文件、数据文件对象及当前写指针的偏移量位置。
然后定义一个文件脚手架类,FileUtils,主要提供写文件的一些方法。
真正的实现类,MarketOrderIndexUtils, 主要是针对某一种数据类型,进行数据保存到文件操作。具体逻辑和数据定义进行硬性绑定,这里是第一版本的实现,后续通过注解反射实现的时候,会脱离硬编码实现。 定义如下:
这样就把数据写入到二进制文件里面去了。
后续再把读取,也就是dump的操作代码写出来,主要通过文件头实现文件合法校验,挨个读取数据后,把对象创建出来。
领取专属 10元无门槛券
私享最新 技术干货