当一个HASHKEY 追加到TREE中,需要进行自顶向下的数据流动,先进入到ROOT MESSAGE BUFFER中,不进行向下流动,到阀值时,进行数据的下推。批量下推,每一个HASHKEY要进行范围定位,看是属于哪个节点的。判断的条件是:当TREENODE对应的BUFFER数据没有满的情况下,追加到此TREENODE中,修改MAX值和COUNTER;如果TREENODE对应的数据满的情况下,增加MAX值的对应判断,如果大于MAX,需要向下一级的MSGBUFFER中追加。
HASHKEY 进入到MSGBUFFERLIST后,需要进行分组,同TREENODEID的放在一起,分组的数量越往下越多(因为TREENODE多),从文件中LOAD 对应的TREENODE的数据到内存中,这个过程是异步的(可以一次LOAD多个TREENODE的数据),到内存后处理就方便了,可以进行INSERT, MERGE, SORT, SPLIT处理,SPLIST数据到下一级的MSGBUFFER中,数据回写到对应的TREENODE对应的磁盘位置。数据需要从比较低层开始进行合并,为了让出空间MSGBUFFER给上一级处理后的数据。这种算法索引 TASK 和文件操作TASK进行的交互较多,时序控制复杂。
另外一种做法,对应MSGBUFFER对应的文件,直接将MSGBUFFER LIST ID发消息给LOGSVR TASK, 在LOGSVR任务中进行文件的读取,数据合并,SPLIT后,处理完一个LEVEL的数据后,发消息给索引 TASK, 索引 TASK 和文件操作TASK的交互少,时序容易控制。