Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

文件整体采用定长记录的组织方式,即一个定长的Header+定长Node序列。Header中存储文件的描述性信息,Node中存储MNode的序列化信息。

Header中目前的字段信息如下表所示。

字段名类型大小描述
header lengthbyte1 byte文件头的长度,1byte 可保证 256 个字节的存储,已足够当前 header 的信息存储,当前的header使用64 byte
node lengthshort2 byte

一个节点记录的长度,2 byte长度可保证65536个字节的存储;

目前代码中多使用512B或1024B,实验表明类似sg1、sg2、d1、d2这种的简单命名,1KB的Node大小可支撑100个子节点

root positionlong8 byte根节点的地址
reserved

保留字段

3.2. 文件记录Node设计

MNode对象的序列化信息在MTree文件中,以定长Node记录链表的形式进行存储。Node记录中的信息包含两个部分,Node Header与 data body, 其中Node Header包含bitmap、pre position、extension position三个字段。Node记录有如下几种类型:

  1. Root Node,根节点。

  2. Internal Node,中间节点记录形式,主要存储name、parent、children等结构信息。

  3. StorageGroup Node,在中间节点的基础上额外存储一个dataTTL字段。

  4. Entity Node,实体节点,在中间节点基础上额外存储aliasChildren、template、LastCacheMap等信息。

  5. StorageGroupEntity Node,实体节点与存储组节点的结合形式,为二者信息取并集。

  6. Measurement Node,在中间节点的基础上额外存储alias、tagOffset、schema以及lastCache信息。

  7. Extension Node,每个Node记录内依次存储字段信息,如果一个Node记录空间不够,则开额外的Extension Node进行使用,即MNode对象的序列化信息被组织成链表进行存储。

Internal Node的格式如下:

字段

描述

长度

内容

Header

bitmap

1 byte

1-3位用于标识类别

Pre position

8 byte

若Node不是Extension Node,则表示父节点地址,Extension Node的此位表示链表前置Node的地址

Next position

8 byte

链表中下一个Extension Node的地址

Body



Name

var

MNode节点名,String的存储一律采用length+content的形式,其中length采用varInt类型,content采用byte[]

templateName

var

模板名

isUsingTemplate1 byte是否使用模板

children




size

var int

child数量

name

position

var


子节点map,存储采用键值对序列的形式,其中name采用string格式,表示子节点名,position采用long,表示子节点地址,最后一个end tag 即1 byte的 00000000 表示map结束

......

name

position


StorageGroup Node的格式如下:

字段

描述

长度

内容

Header

bitmap

1 byte

1-3位用于标识类别

Pre position

8 byte

若Node不是Extension Node,则表示父节点地址,Extension Node的此位表示链表前置Node的地址

Next position

8 byte

链表中下一个Extension Node的地址


Body







Name

var

MNode节点名,String的存储一律采用length+content的形式,其中length采用varInt类型,content采用byte[]

dataTTL

8 byte

存储组中的数据生存时间

templateName

var

模板名

isUsingTemplate1 byte是否使用模板

children




sizevar intchild数量

name

position

var



子节点map,存储采用键值对序列的形式,其中name采用string格式,表示子节点名,position采用long,表示子节点地址,最后一个end tag 即1 byte的 00000000 表示map结束



......

name

position


EntityMNode

字段

描述

长度

内容

Header

bitmap

1 byte

1-3位用于标识类别

Pre position

8 byte

若Node不是Extension Node,则表示父节点地址,Extension Node的此位表示链表前置Node的地址

Next position

8 byte

链表中下一个Extension Node的地址

Body










Name

var

MNode节点名,String的存储一律采用length+content的形式,其中length采用varInt类型,content采用byte[]

templateName

var

模板名

isUsingTemplate1 byte是否使用模板

children

size

var int

child数量

name

position

var



子节点map,存储采用键值对序列的形式,其中name采用string格式,表示子节点名,position采用long,表示子节点地址,最后一个end tag 即1 byte的 00000000 表示map结束

......

name

position

aliasChildren

sizevar int

child数量

name

position

var



子节点别名map,存储方式与children相同

......

name

position


StorageGroupEntityMNode

字段

描述

长度

内容

Header

bitmap

1 byte

1-3位用于标识类别

Pre position

8 byte

若Node不是Extension Node,则表示父节点地址,Extension Node的此位表示链表前置Node的地址

Next position

8 byte

链表中下一个Extension Node的地址

Body











Name

var

MNode节点名,String的存储一律采用length+content的形式,其中length采用varInt类型,content采用byte[]

dataTTL

8 byte

存储组中的数据生存时间

templateName

var

模板名

isUsingTemplate1 byte是否使用模板

children

size

var int

child数量

name

position

var



子节点map,存储采用键值对序列的形式,其中name采用string格式,表示子节点名,position采用long,表示子节点地址,最后一个end tag 即1 byte的 00000000 表示map结束

......

name

position

aliasChildren

size

var int

child数量

name

position

var



子节点别名map,存储方式与children相同

......

name

position


Measurement Node的格式如下:

字段

描述

长度

内容

Header

bitmap

1 byte

1-3位用于标识类别

Pre position

8 byte

若Node不是Extension Node,则表示父节点地址,Extension Node的此位表示链表前置Node的地址

Next position

8 byte

链表中下一个Extension Node的地址

Body










Name

var

MNode节点名,String的存储一律采用length+content的形式,其中length采用varInt类型,content采用byte[]

alias

var

Measurement MNode节点别名

tagOffset

8 byte

标签/属性信息在TagFile中的位置

schema

type

1 byte

数据类型

encoding

1 byte

编码方式

compressor

1 byte

压缩方式

props

key

value

var




压缩参数

key

value

......

End tag



Image Added


4. 文件读写功能设计

目前的文件读写功能的实现主要分三个层次

...