1. BsTr tree结构图

图中的深度是指表所代表的树的深度。页面大小为文件中chunk的大小。flag为表key的类型和数据的形式。入口chunk为树的根地址。offset为在文件中的存储位置。时间戳为创建表的时间戳,按纳秒计算。dorped表示表是否被标记为删除。 图中各表的深度默认都为3层,最高层是次层各个chunk的最大关键字的有序组合,依次类推,直至叶子节点。叶子节点包含数据,而树枝节点只包含关键字。上图的parent、left、right是三个指针,分别指向父节点、左右兄弟节点,图中没有画指向箭头,只是标记了相应节点的最大key来指代指针的指向。 可以看的出来,BsTr tree和一般的B+树不同的是,除了指向孩子节点的指针和offset,它还包含了指向父节点和左右节点的指针和offset(offset用于实现指针混写,在内存和文件页面间自由转换)。 flag支持多种组合。具体如下:     THE BSTRTREE CAN WANDER BETWEEN MEMORY AND DISK     SUPPORT KEY OF 5 TYPES:STRING/[]BYTE/COMPLEX128/INT64/FLOAT64     DIFFERENCE BETWEEN MEM MODE AND NON-MEM MODE: NON-MEM MODE WRITE ALL OPERATION TO DISK, MEM MODE NOT.     DO NOT RECOMMEND COMPRESS | BIG     BECAUSE DATA WAS COMPRESSED, WILL MAY NOT SATISFY BIG MODE.     UNIQUE: UNIQUE KEY     STRKEY: STRING TYPE KEY     NOSERIAL: NOT SERIALIZE DATA.  SERIAL MODE: SERIALIZE DATA TO A BSTR STRUCT FIRSTLY.     BIG: BIG DATA MODE     FILEBIG: BIG DATA SAVE TO FILE, INCLUDE BIGDATA NOT USE BIG MODE. BE CAREFULLY, WHEN READ, MAYBE OOM.     NUMBERED: SORTED DATA NO.     COMPRESS: COMPRESS DATA     NULLKEY: KEY IS NULL, NOT AVAILABLE CURRENTLY.     I64KEY: INT64 KEY     F64KEY: FLOAT64 KEY     C128KEY: COMPLEX128 KEY     BSKEY: []BYTE KEY     NULL: KEY CAN NULL,NOT NULLKEY     EMBEDED: EMBEDED MODE, A DB AS A KEY-DATA     MEM: memory mode, collide with FILEBIG ----------------------------------------------------------- Example as StrKey composite:     UNIQUE|STRKEY|NOSERIAL     UNIQUE|STRKEY|NOSERIAL|BIG     UNIQUE|STRKEY     UNIQUE|STRKEY|BIG     UNIQUE|STRKEY|NOSERIAL|FILEBIG     UNIQUE|STRKEY|NOSERIAL|BIG|FILEBIG     UNIQUE|STRKEY|FILEBIG     UNIQUE|STRKEY|BIG|FILEBIG     STRKEY|NOSERIAL     STRKEY|NOSERIAL|BIG     STRKEY     STRKEY|BIG     STRKEY|NOSERIAL|FILEBIG     STRKEY|NOSERIAL|BIG|FILEBIG     STRKEY|FILEBIG     STRKEY|BIG|FILEBIG     NUMBERED|UNIQUE|STRKEY|NOSERIAL|BIG     NUMBERED|UNIQUE|STRKEY     NUMBERED|UNIQUE|STRKEY|BIG     NUMBERED|UNIQUE|STRKEY|NOSERIAL|FILEBIG     NUMBERED|UNIQUE|STRKEY|NOSERIAL|BIG|FILEBIG     NUMBERED|UNIQUE|STRKEY|FILEBIG     NUMBERED|UNIQUE|STRKEY|BIG|FILEBIG     NUMBERED|STRKEY|NOSERIAL     NUMBERED|STRKEY|NOSERIAL|BIG     NUMBERED|STRKEY     NUMBERED|STRKEY|BIG     NUMBERED|STRKEY|NOSERIAL|FILEBIG     NUMBERED|STRKEY|NOSERIAL|BIG|FILEBIG     NUMBERED|STRKEY|FILEBIG     NUMBERED|STRKEY|BIG|FILEBIG     COMPRESS|UNIQUE|STRKEY|NOSERIAL     COMPRESS|UNIQUE|STRKEY|NOSERIAL|BIG     COMPRESS|UNIQUE|STRKEY     COMPRESS|UNIQUE|STRKEY|BIG     COMPRESS|UNIQUE|STRKEY|NOSERIAL|FILEBIG     COMPRESS|UNIQUE|STRKEY|NOSERIAL|BIG|FILEBIG     COMPRESS|UNIQUE|STRKEY|FILEBIG     COMPRESS|UNIQUE|STRKEY|BIG|FILEBIG     COMPRESS|STRKEY|NOSERIAL     COMPRESS|STRKEY|NOSERIAL|BIG     COMPRESS|STRKEY     COMPRESS|STRKEY|BIG     COMPRESS|STRKEY|NOSERIAL|FILEBIG     COMPRESS|STRKEY|NOSERIAL|BIG|FILEBIG     COMPRESS|STRKEY|FILEBIG     COMPRESS|STRKEY|BIG|FILEBIG     COMPRESS|NUMBERED|UNIQUE|STRKEY|NOSERIAL|BIG     COMPRESS|NUMBERED|UNIQUE|STRKEY     COMPRESS|NUMBERED|UNIQUE|STRKEY|BIG     COMPRESS|NUMBERED|UNIQUE|STRKEY|NOSERIAL|FILEBIG     COMPRESS|NUMBERED|UNIQUE|STRKEY|NOSERIAL|BIG|FILEBIG     COMPRESS|NUMBERED|UNIQUE|STRKEY|FILEBIG     COMPRESS|NUMBERED|UNIQUE|STRKEY|BIG|FILEBIG     COMPRESS|NUMBERED|STRKEY|NOSERIAL     COMPRESS|NUMBERED|STRKEY|NOSERIAL|BIG     COMPRESS|NUMBERED|STRKEY     COMPRESS|NUMBERED|STRKEY|BIG     COMPRESS|NUMBERED|STRKEY|NOSERIAL|FILEBIG     COMPRESS|NUMBERED|STRKEY|NOSERIAL|BIG|FILEBIG     COMPRESS|NUMBERED|STRKEY|FILEBIG     COMPRESS|NUMBERED|STRKEY|BIG|FILEBIG     UNIQUE|STRKEY|NOSERIAL|EMBEDED    以上还可以组合数据的类型:STRDATA、I64DATA、F64DATA、C128DATA、BYTESDATA。数据的类型属于可选项,非必须指定。

2. BsTr tree多线程安全写的脉动工作流图

   

在多线程运行情况下,BsTr树的Put操作(包括插入、删除和更新)是安全的。 前几个驻留协程的顺序执行是在缓冲通道的支持下进行的,因此不会阻塞等待。 在最后环节,不同类型的key对应不同的驻留协程,而不同的key和不同的flag对应着不同的表,不同的表对应不同的树,也就是说,支持表级并行执行。

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: