Page 239 - 《软件学报》2021年第10期
P. 239

朱阅岸  等:构建新型高性能与高可用的键值数据库系统                                                      3211


                        p :第 p 个分片的复制集合;
                        p 、 p_repl 、 p_ack 、 p_r :分别是第 p 个分片已完成的修改操作集合、复制集合、ack 等待集合与回复
                        集合;
                        p :第 p 个分片的批量修改操作;
                       state ik 1    applicator (,u state ik  ) :在重放函数 applicator 的作用下,第 p 个分片的状态从 state ik p  迁移到
                                              p
                            p
                        state ik 1 ;
                            p
                       ( p ):将请求打包,然后使用一个系统调用将其发送到其他节点;
                          u
                        针对第 p 个分片的修改操作 u 的 ack 集合;
                         p
                        p :第 p 个分片一批修改操作的 ack 集合;
                       r p :第 p 个分片所有修改操作的待回复集合;
                        u p  : 等待回复的第 p 个分片的修改操作 u;
                        p :等待回复的第 p 个分片上某一批修改操作 u.
                    Replication Algorithm. Replicate log record to other storage nodes.
                    Input: File descriptor fd;
                    1.   Procedure RequestDispatch(fd)    /*dispatch a task to certain channel*/
                    2.      while LogStore.IsRunning do
                    3.                {}u i     /*receive ith request for pth partition*/
                              p    p   p
                    4.           p    p     {}u i p     /*put ith request into pth channel*/
                    5.            increment LSN of replication channel
                    Input: Set of pth partition requests  p ;
                    1.   Procedure ProcessTask( p )    /*process one batch of task*/
                    2.      while  p  p  do
                    3.          p 
                    4.          p pick a batch of requests from  p  p
                    5.          p  p  p
                    6.         for each u in  p  do    /*processing a batch size k*/
                    7.            state ik 1    applicator (,u state ik p  )
                                 p
                    8.            r   p  r   p  {} u p     /*add u’s reply obj     into waiting reply set r p */
                                                          u
                                                          p
                                                 u
                    9.            add ack into u’s ack set    in pth replication channel    /*local ack*/
                                                 p
                    Input: Set of pth replication requests  p ;
                    1.   Procedure replicateSendStage( p )
                    2.      while  p  p_repl  do
                    3.          p pick a batch of requests from { p  p_repl }
                    4.          p_repl  p_repl  p
                    5.         send ( p )    /*pack modification messages and send by one sys call*/
                    6.         foreach u in  p  do
                    7.              p    p         /*add u’s ack set     into waiting ack set  p */
                                                          u
                                        u
                                                          p
                                        p
                    Input: Set of pth partition acknowledge  p ;
                    1.   Procedure ReplicationRecvAndAckStage( p )
   234   235   236   237   238   239   240   241   242   243   244