使用BUFFER CACHE进行数据的处理,KEY进行INSERT的过程中,首先进行PAGE算法,对应到TREENODE上,进行比较,如果大于TREENODE 对应的MAX(TREENODE 的FILE中SEGMENT的数据没有满的情况下,不进行MAX的比较,都可以进行INSERT本LEVEL 的MSGBUFFERLIST 中),继续下一LEVEL的TREENODE的判断,过程进行重复即可。
某Level 的MSGBUFFER的数量超过阀值,需要进行数据的下推,会触发本LEVEL的数据持久后,写文件操作,将数据写到对应TREENODE的SEGMENT上,同时修改TREENODE的COUNTER和MAX。
本LEVEL进行的INSERT, MERGE, SORT, SPLIT处理后,挤出的数据需要下推到下一LEVEL 的MSGBUFFER,存在一个问题,挤出的数据是否可以全数INSERT下一级的MSGBUFFER,如果下一LEVEL的MSGBUFFER空间够,直接INSERT;如果MSGBUFFER空间不够的话,就需要进行NEXT LEVEL的持久化,过程控制就比较复杂。有可能每一LEVEL 的MSGBUFFER都出现此情况。
一个假设是MSGBUFFER 的数据进行NSERT, MERGE, SORT, SPLIT处理后,挤出到下一级的数据是不会增加的,最多是和INPUT的数据相同,这样就可以使用同一个CALLBACKBUFFER来进行数据缓存,等下一个触发来进行继续向下推的处理。
算法有两个空间来进行下推数据的处理,可以定义为INPUT MSGBUFFERLISET, 另一个可以定义为NEXT INPUT MSGBUFFERLIST, 其中NEXT INPUT MSGBUFFERLIST是向下一LEVEL推数据的缓存。