Skip to content

关于文件数据格式 #1947

Closed
Closed
@gongweibao

Description

@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

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions