其实,杨成刚才就在思考这个问题了。
有没有更好的方法来进行数据保存和恢复?
答案是肯定有的。
可以使用xor(异或运算)来做奇偶验证!
一个简单的应用会像是这样:
首先,把硬盘上的数据分割成几份相同大小的数据块。
假设原始数据是这样:
[0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0]
我们从中间劈开成2块,分别命名为a和b:
a:[0,0,0,1,1,1,1,0]
b:[0,1,0,0,1,0,1,0]
然后,创建一个备份盘c,用来存储奇偶信息。
接着,对a和b的每一个相同位置,作异或运算。
a[0]=0,b[0]=0,异或得0,存入c[0]
a[1]=0,b[1]=1,异或得1,存入c[1]
a[2]=0,b[2]=0,异或得0,存入c[2]
......
一趟遍历下来,备份盘c被填充满信息,得到:
c:[0,1,0,1,0,1,0,0]
这么做有什么好处呢?
一旦保存原始数据的a盘或者b盘损坏,可以通过c盘重新计算异或来恢复。
假设a盘数据丢失了,我们对b和c的每一个相同位置,作异或运算。
这样就能还原出a盘数据。
另外,可以观察到一个有趣的现象:
和镜像保存所需的空间相比,这种方式得到的c盘空间是不是只有一半?
空间效率大大提高了!
嗯,就是这种了,得跟项目经理好好谈谈。
有没有更好的方法来进行数据保存和恢复?
答案是肯定有的。
可以使用xor(异或运算)来做奇偶验证!
一个简单的应用会像是这样:
首先,把硬盘上的数据分割成几份相同大小的数据块。
假设原始数据是这样:
[0,0,0,1,1,1,1,0,0,1,0,0,1,0,1,0]
我们从中间劈开成2块,分别命名为a和b:
a:[0,0,0,1,1,1,1,0]
b:[0,1,0,0,1,0,1,0]
然后,创建一个备份盘c,用来存储奇偶信息。
接着,对a和b的每一个相同位置,作异或运算。
a[0]=0,b[0]=0,异或得0,存入c[0]
a[1]=0,b[1]=1,异或得1,存入c[1]
a[2]=0,b[2]=0,异或得0,存入c[2]
......
一趟遍历下来,备份盘c被填充满信息,得到:
c:[0,1,0,1,0,1,0,0]
这么做有什么好处呢?
一旦保存原始数据的a盘或者b盘损坏,可以通过c盘重新计算异或来恢复。
假设a盘数据丢失了,我们对b和c的每一个相同位置,作异或运算。
这样就能还原出a盘数据。
另外,可以观察到一个有趣的现象:
和镜像保存所需的空间相比,这种方式得到的c盘空间是不是只有一半?
空间效率大大提高了!
嗯,就是这种了,得跟项目经理好好谈谈。