关于文件数据格式
Created by: gongweibao
Goals
- 找到或者设计一个文件格式, 可以方便的切分文件,以便于task的分发
- 独立于某个系统
可以选择的方式
-
SSTable
- Sorted String Table
- LoadSSTable的时候首先要加载索引,然后才能定位、分割
-
SeqenceFile
- 比较复杂
设计的简化的方式
我们的目标主要是文件可以分割,其实可以不用索引,比如
file format:
file_type : paddle_seq
reserve : reserve bytes for future
chunk :
...
chunk format:
header : magic number
checksum : checksum of (chunk_len+chunk_data)
reserve : reserve bytes for future
chunk_len : len(chunk_data)
chunk_data : many or one records
chunk_data format:
record_len : len(record_data)
record_data: user's data
...
-
checksum的作用:
- 我们的数据可能来自用户自己生成,通过公网传输,防止出现数据的错误
- 出现错误后,只丢失一个chunk
- 和header配合做一个检查chunk的边界
-
magic number的选择
- 0xffffffff之类的header比较常见,容易重复
- 一个 随机的MD5值出现的概率很低,可以大大减少冲突的机会
任务分发和处理
-
task信息:
- file_path + begin_pos + end_pos
- 根据文件大小和task的个数进行分割
-
trainer读取:
- 首先seek到begin_pos
- find header,
- 然后尝试按照一个完整的记录去读取
- 出现错误继续循环find header
- 直到超过end_pos