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对应着不同的表,不同的表对应不同的树,也就是说,支持表级并行执行。