Page 380 - 《软件学报》2024年第6期
P. 380

2956                                                       软件学报  2024  年第  35  卷第  6  期


                  (      )
                 C  V r s1,V r s2  , 即同一时刻不同会话读版本之间的版本差     q :
                     i  j
                                          (      )

                                                                      s2
                                                                 s1
                                         C  V r s1,V r s2 =  V r s1 − V r s2  ⩽ q, r .t = r .t, 0 ⩽ q ⩽ n,




                                             i  j     i    j     i    j
                 其中,   C (V n ,V r ) 表明当前读版本与最新写操作产生的数据版本之间的版本标识号差异, 差异越大, 读新鲜数据的能
                         (      )
                 力越弱;    C  V r s1,V r s2  表明同一时刻, 任意两个会话   s 1 , s 2  读到版本  V r s1,V r s2  的版本标识号差异.
                           i   j                                    i  j
                    HTAP  数据库系统中读取版本的新鲜程度反映为读写版标识号差异, 而差异的程度是由数据库的一致性模型
                 决定的. 主流的一致性模型包括线性一致性、顺序一致性和会话一致性. 其中, 线性一致性以牺牲响应时间和性能
                 的方式换取数据的高新鲜度; 而会话一致性通过适当放松对新鲜度的要求换取更高的性能; 顺序一致性则处于两
                 者之间, 对性能和数据新鲜度进行折中以满足使用需要. 以下我们分别说明                        3  种一致性模型与数据共享模型之间
                 的具体对应关系.
                  2.1.1    线性一致性
                    线性一致性于      1990 年被首次提出    [37] , 在线性一致性约束下, HTAP   数据库系统应当保证, 对于任意版本读操
                                           r
                 作   r, r  读取的数据版本  V r  必然由   执行时已完成的最新版本更新序列          S n  产生. 也就是说, AP  端读取的版本与当
                 前  TP  端版本不存在差距, 即    p = 0 . 因此, AP  客户端在同一时刻所读取到的数据都是一致且最新的, 即               q = 0 .
                    数据共享模型实现涉及数据生产、同步、消费的
                    如图  2(a) 所示, 两个  TP Client 在数据项  X  上执行写操作. 以  t8  时刻为例, 由于  TP  端写入保持全局有序, 此时
                 已完成的更新序列为        S 4 = {w 1 ,w 2 ,w 3 ,w 4 } , 此时数据项  X  值的演变顺序为  2→1→0→6; 而不同的  AP Client 在  t2,
                 t4, t6, t8  时刻读到的值分别为  2, 1, 0, 6  与版本更新序列始终保持一致, 即读取数据项          x 的版本总是相应时刻版本
                 更新序列的最大前缀序列, 即分别为           S 1 ,S 2 ,S 3 ,S 4  .
                  2.1.2    顺序一致性
                                                                                         r
                    在顺序一致性约束下, HTAP        数据库系统应当保证任意读操作            r  读到的数据版本    V r  应由   执行之前的一个前
                 缀更新序列产生, 即      p = n ; 相同时刻对同一个数据项的多个读操作            r i  读到的数据版本  V i  相同, 即  q = 0 , 即各  AP
                 节点在同一时刻读到的数据一致, 但不保证是最新的.
                    如图   2(b) 所示, 以  t8  时刻为例, 在版本更新序列为        S 4 = {w 1 ,w 2 ,w 3 ,w 4 }  时, 数据项  X  经历的演变过程是
                 2→1→0→6, 而两个    AP  客户端  (Client A/B) 在  t2, t4, t6, t8  时刻读到的  X  值都是  2, 1, 0, 0. 其中  t8  时刻与  t6  时刻

                 读取到一样的值, 即基于更新序列的前缀更新序列                 S 3 = {w 1 ,w 2 ,w 3 } 进行了数据读取, 也就是说  AP  端并不保证读
                 取到  x 最新的数据版本.
                  2.1.3    会话一致性
                                                                                              s
                                                                             s
                    在会话一致性约束下, HTAP        数据库系统应当保证会话          s 的任意读操作    r  读的数据版本    V r s  由  r  执行之前的
                                      p = n . 但对于相同时刻执行的对同一个数据项的多个读操作, 所读取的数据对应的前
                 一个前缀更新序列产生, 即
                 缀序列不一定相同, 即      q = n . 在该一致性模型下, AP   端读取的版本与       TP  端版本可能具有差距, 且各      AP  节点读取
                 版本可能不同. 因此, 不同      AP  端在同一时刻所读取到的数据既非最新的, 也非完全一致的.
                    如图  2(c) 所示, 两个  AP 客户端  (Client A/B) 在  t2, t4, t6, t8  时刻读到的值分别为  2, 1, 0, 0  和  2, 1, 1, 1, 即不同
                 的  AP  请求在不同会话下读取的值不一样, 但整体上与某个前缀更新序列一致, 如                     t8  时刻分别对应   S 3 ,S 2  , 符合会
                 话一致性约束.
                  2.2   数据共享模型实现
                                                           3  个步骤, 分别对应如下    3  个子问题   (如图  3  所示).
                    ● 数据版本标识号分配: 即如何以一个确定的版本标识号来标识当前数据版本, 在数据产生时如何为数据分
                 配标识号以及在查询到来时如何为查询分配标识号.
                    ● 数据版本同步: 即如何同步        TP  端的更新序列到     AP  端, 以确保  AP  端在满足不同一致性约束下读到某个版
                 本标识号对应的数据版本.
                    ● 数据版本追踪: 即当查询到来时, 如何在本地或跨多个节点获取某个一致性快照下的数据版本.
                    实际上, 由于向    AP  端共享最新的版本会引起对         TP  端资源的占用, 所以高性能和高新鲜度存在天然的矛盾, 这
   375   376   377   378   379   380   381   382   383   384   385