rs.txt 内容

AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDSDG

分片和解码

package main// rs 纠删码
import ("fmt""io/ioutil""os""path/filepath""strconv""github.com/klauspost/reedsolomon"
)const (dataShards = 2 // 数据分片数parShards  = 1 // 校验分片数
)func main() {//encoder()decode()
}func encoder() {fname := "rs.txt"// Create encoding matrix.enc, err := reedsolomon.New(dataShards, parShards)checkErr(err)fmt.Println("Opening", fname)b, err := ioutil.ReadFile(fname)checkErr(err)// Split the file into equally sized shards.// 此时分成了3等片shards, err := enc.Split(b)checkErr(err)fmt.Printf("File split into %d data+parity shards with %d bytes/shard.\n", len(shards), len(shards[0]))// Encode parity// 分片 encode 下err = enc.Encode(shards)checkErr(err)// Write out the resulting files._, file := filepath.Split(fname)dir := "./tmp/encoder/"for i, shard := range shards {outfn := fmt.Sprintf("%s.%d", file, i)fmt.Println("Writing to", outfn)// 分割的分片写入各个文件中err = ioutil.WriteFile(filepath.Join(dir, outfn), shard, os.ModePerm)checkErr(err)}
}func checkErr(err error) {if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())os.Exit(2)}
}// -------------------------  decode  -----------------------func decode() {// Create matrixenc, err := reedsolomon.New(dataShards, parShards)checkErr(err)fname := "./tmp/encoder/rs.txt"// Create shards and load the data.shards := make([][]byte, dataShards+parShards)var iNum []intfor i := range shards {infn := fmt.Sprintf("%s.%d", fname, i)fmt.Println("Opening", infn)shards[i], err = ioutil.ReadFile(infn)if err != nil {fmt.Println("Error reading file", err)shards[i] = niliNum = append(iNum, i)}}// Verify the shardsok, err := enc.Verify(shards)if ok {fmt.Println("No reconstruction needed")} else {fmt.Println("Verification failed. Reconstructing data")// 恢复切片err = enc.Reconstruct(shards)if err != nil {fmt.Println("Reconstruct failed -", err)os.Exit(1)}// 再次验证分片ok, err = enc.Verify(shards)if !ok {fmt.Println("Verification failed after reconstruction, data likely corrupted.")os.Exit(1)}checkErr(err)// 丢失的分片数据恢复for _, i2 := range iNum {outfn := fname + "." + strconv.Itoa(i2)err = ioutil.WriteFile(outfn, shards[i2], os.ModePerm)}}outfn := "./tmp/decoder/rs.txt"fmt.Println("Writing data to", outfn)f, err := os.Create(outfn)checkErr(err)// We don't know the exact filesize.// 还原数据err = enc.Join(f, shards, len(shards[0])*dataShards)checkErr(err)
}

go分布式存储,rs纠删码相关推荐

  1. RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划

    作者 | .NY&XX 来源 | CSDN博客专家,责编 | 夕颜 封图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 前言 Erasure Code(EC),即 ...

  2. fabric通过java怎么整合RS纠删码的实现

    fabric是一个分布式账本平台,它提供了一种简单的方式来构建区块链应用程序.如果想要在fabric中使用RS纠删码,可以按照以下步骤进行整合: 首先,需要在fabric中定义一个新的链码(chain ...

  3. RS(纠删码)技术浅析及Python实现

    前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...

  4. 纠删码项目总结(1.0)

    1. 为什么要使用纠删码? 随着数据的持续增长,在 PB 级别的数据中心,多副本技术会引入极大的存 储开销.比如,现有的分布式存储系统,如 HDFS(Hadoop distributed file s ...

  5. 纠删码在实时视频流中的应用丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网网络体验团队王瑞. 01 背景 在实时音视频通话中,音视频质量受网络丢包影响较大,特别是对于视频. 为什么视频对丢包更敏感呢?通常来说,音频的 ...

  6. minio存储之纠删码(Erasure Code)

    纠删码的原理介绍可以参考: https://www.jianshu.com/p/4abf65ad03af 一般上我们如果要保证数据高可用,主流的有两种策略: 多副本 纠删码 副本(Replicatio ...

  7. CubeFS存储技术揭密(1) — 纠删码引擎系统设计

    00  背景 CubeFS 3.0.0以前版本只提供多副本存储,随着数据规模持续增长,业务面临着更大的成本挑战,用户对更低成本的纠删码(ErasureCode, 下文简称EC)的需求愈加强烈:Cube ...

  8. CubeFS存储技术揭秘(2)— 纠删码单机存储引擎

    00 背景 CubeFS自3.0.0版本开始提供低成本的纠删码存储(BlobStore),BlobStore是一个高可靠.高可用.低成本.支持EB规模的Blob存储.通过前文(CubeFS存储技术揭密 ...

  9. 什么是纠删码(与纠错码的区别)|纠删码与副本对比|LDPC码

    什么是纠删码(与纠错码的区别) 存储领域来看,数据冗余机制其实这几十年来没有太多进展,RAID.副本一直是当仁不让的最终选择.而近几年,尤其是规模较大的应用场景下,纠删码越来越多的出现在选择的视野范围 ...

最新文章

  1. 机器学习研究者必知的八个神经网络架构
  2. 关于Oracle数据库19c中的关键字和保留字的说明
  3. 拉格朗日乘子法 KKT条件
  4. Android BlueBorne (CVE-2017-0781)漏洞分析和利用
  5. 本地存储localStorage
  6. 开关造成的毛刺_模具清洗机干冰清洗机干冰去毛刺机安全注意事项
  7. python教材答案第六章_python第六章{输入和输出}
  8. 玩客云刷armbian后根目录扩展
  9. 操作系统(4)状态机视角下的程序执行
  10. [windows网络编程]tcp/udp编程初步详解-转
  11. XMLHttpRequest接收JSON请求
  12. Slave_SQL_Running: No mysql同步故障解决方法
  13. 人民币兑换、换硬币 C语言
  14. linux dstat 多 cpu,dstat 用法总结
  15. 如何搭建一个uni-app项目并运行
  16. 7万字总结Spring,这回能看懂Spring源码了!
  17. Docker的Pull Digest和Image ID
  18. 索尼a6000拍月亮_如何给月亮拍好照片
  19. 算法图解(一):算法简介
  20. DTX-1800精度恢复,调教之路?

热门文章

  1. OPENWRT/LEDE编译教程
  2. 企业微信 自建服务器,企业微信单点登录自建系统过程记录
  3. sdut 算符优先系列之(一)Firstvt和Lastvt集
  4. 带滚动字幕的视频批量制作的方法
  5. C语言课设选择题标准化考试系统(大作业)
  6. 大自然背景的清晨闹铃.wav
  7. Vue 开发环境搭建(Mac 版)
  8. 谷歌浏览器去广告扩展程序(网页插件)
  9. RocketMQ - nameSrv和Broker
  10. 高德地图 zoom地图级别无效问题