Page 152 - 《软件学报》2020年第11期
P. 152
3468 Journal of Software 软件学报 Vol.31, No.11, November 2020
b) T a 对 T b 的调用链依赖度定义为 D Trace (T a →T b ),等于同时操作 T a ,T b 这两张表的调用链数量占操作 T a
的调用链数量的比例.
|Trace ( )T ∩ Trace ( ) |T
D Trace (T → a T b ) = a b (12)
|Trace ( ) |T a
c) T a 对 T b 的场景依赖度定义为 D Scenario (T a →T b ),等于同时操作 T a ,T b 这两张表的场景数量占操作 T a 的场
景数量的比例.
D Scenario (T → a T b ) = | Scenario ( )T ∩ Scenario ( ) |T b (13)
a
| Scenario ( ) |T a
T a 对 T b 的依赖度可以看作是 T a 对 T b 的“数据依附”关系,依赖度越高,这种依附关系越明显,T a 越倾向于和
T b 在一起.但依赖度是双向的,如果 T a 对 T b 的依赖度很高,而 T b 对 T a 的依赖度很低,可以认为 T b 和 T a 有一种“主
从”关系,而 T b 与其他多个表之间也可能存在这种“主从”关系.比较典型的例子如图 6 所示,在实验系统
JeeSite [30] 中一共有 22 张数据表,sys_log 表负责记录每一次数据操作的日志,对其他数据表(如图中的 sys_user,
sys_office 等)的操作都会同步插入一条 sys_log 数据.所以这些数据表会呈现出对 sys_log 表的强依赖,但对
sys_log 表的操作却是独立于这些表的.
sys_user 强依赖
弱依赖
sys_role sys_office
sys_log
sys_area sys_dict
...
Fig.6 Database table dependency graph around sys_log table
图 6 以 sys_log 表为中心的数据表依赖图
为了避免将以 sys_log 表为中心的多个不同子领域的表都划分到一起,只有当满足以下 4 个条件之一时,T a
和 T b 才会被归入同一个共享群组.
• 条件 1:D SQL (T a →T b )+D SQL (T b →T a )>γ 1 .
• 条件 2:D Trace (T a →T b )+D Trace (T b →T a )>γ 2 .
• 条件 3:D Scenario (T a →T b )+D Scenario (T b →T a )>γ 3 .
• 条件 4:D SQL (T a →T b )+D SQL (T b →T a )+D Trace (T a →T b )+D Trace (T b →T a )>γ 4 并且
D Scenario (T a →T b )+D Scenario (T b →T a )>γ 5 .
其中,γ 1 =1.4,γ 2 =1.6,γ 3 =2,γ 4 =2.8,γ 5 =1.
根据以上条件,识别出的 x 张共享表被分成 r 个共享群组 G′ ,...,G′ .最后,考虑一种特殊情况,即对于一张非
1 r
共享表 T c ,如果 T c 无论是在 SQL 级别、调用链级别还是场景级别,只跟一个共享群组 G d 中的表有关联,那么我
们倾向于把 T c 和 G d 中的表划分到一起.所以,需要遍历所有非共享表,将只跟一个共享群组有关联的表加入该
群组中,得到最终的共享群组 G 1 ,…,G r .
(1) 数据表权重矩阵生成
根据公式(5)计算 n 张数据表两两之间的关联度,得到 n×n 的对称矩阵 M,矩阵的第 i 行第 j 列元素 m ij 等于
Table i 与 Table j 之间的总关联度 C Total (T i ,T j ).显然,m ij =m ji .矩阵 M 对角线上元素值为 1.
遍历每个共享群组,针对第 p 个群组 G p 中的共享表 T q ,对矩阵 M 的第 q 行和第 q 列元素做如下调整.
⎧ ⎪ max(m iq , ), Tδ 1 i ∈ G p
m = qi m = iq ⎨ , i = 1,...,n (14)
⎪ ⎩ δ ⋅ 2 m iq , T ∉ i G p
其中,δ 1 =0.9,δ 2 =0.2.