作者在2017年就已经想出并且提出了解决方案,而我2024年还在这里徘徊,真的令人难以形容。
最小存储再生码可以最优利用存储资源(因为是最小存储再生码,所以存储是最优的),同时可以实现数据修复开销最优;在进行数据修复时,给定存储开销下的最优修复开销可计算为:
什么含义呢?一个具有k个数据节点,m个校验节点的系统中,对大小为M的数据进行编码,每个节点分别存储大小为M/k的数据量。当其中某一个节点内数据失效时,通过搜寻条带下d个有效节点,每一个节点传输(M/k)(1/(d-k+1))的数据参与修复,因此失效数据的修复总共需要d/(d-k+1)倍于丢失数据的数据量。
分母d-k+1时怎么来的?:因为是最小存储再生码,从信息流图得到的公式:
然后取极限情况,该不等式取等号情况,则在等号成立情况下,得到下图:在曲线上的点,都满足等号成立的情况,我们注意观察左上角的MSR点,该点是α取最小值的情况,横坐标α是每一个节点的子分组化个数,子分组化个数越少,节点个数n不变,则所有节点的存储越小;纵坐标dβ是(d:参与修复的节点个数) × (β:从每一个节点下载的数据量),dβ越小,意味着在网络中传输的数据量越小,即MBR点:最小修复带宽。
在MSR点时,满足α = (d - k + 1) β,怎么来的呢?Σmin{α,(d-i)β}中,要使α越小,当α<(d - k + 1)β时,可以在等式成立的条件下减小参数β,所以最优再生码的参数必须满足α ≥(d - k + 1)β,所以极限情况就是等号成立情况,即α = (d - k + 1) β。
现在,我们再取极限情况,假设从每一个节点下载的数据量=1,即β=1,则α = d - k + 1,即子分组化级别为d-k+1,什么是子分组化呢,就是把节点再细分为很多个内部块,则现在每一个节点又包含d-k+1个子块,大家看到这是不是觉得很牛?其实我告诉你,以上关于分母 d-k+1的来源全部都是错误的!!!!!!!
接下来从原始思路理解一下:
通过信息流图,计算出tradeoff,且取上述的极端点:MSR(最小存储再生码),得到了下述公式:即子分组化级别为M/k,修复带宽为Md/(k(d-k+1)),现在讨论的一切,都是基于下述的这个公式。
当d = k时,即参与修复的节点个数 = 信息节点个数时,修复的通信总量 = M;这个很好理解,因为具有MDS属性,每一个节点包含的信息量都 = M/k,那么一共有k个也就是d个修复节点,那么通信总量就是文件大小M,所以,任意一个节点失效,都可以用这样的方法来进行修复,通信总量仍然是M。
那么怎么做可以减少通信总量呢?如果把参与修复的节点个数提高一点,不妨取一个极端情况,即d = n-1情况,在这种情况下,修复的通信总量是多少呢?我们需要用到上述的这个公式,通过计算可以得到,修复的通信总量为:
,也即
所以怎么得来的呢?信息流图。具体参考下述公式:
所以最优修复开销为 (M/k)(d/(d−k+1)),假设相同参数的(k,m)RS码,修复需要k倍也就是 (M/k)(k/(d−k+1))的数据量,所以减少了单错修复的数据开销。随着参与修复的节点数目增多,每一个块参与传输的数据量减少,使得整体的网络流量降低。d最大值为n-1,此时的修复开销为: (M/k)((n-1)/m)。
缺点主要有三点:第一是存储开销大,可以应用的场景少;第二是没有清晰且通用的构造和修复过程;第三是仅仅有数据块的最优修复,校验块的修复开销很大。
标签:存储,修复,个数,开销,混合,数据量,再生,节点 From: https://www.cnblogs.com/KeithTee/p/18182489