核桃
2022-03-23
Erasure code的就是EC卷,在hdfs里面现在已经支持了,同时存储的glusterfs这些也支持。所谓的EC卷,和副本卷最大的不同是,节点中存放的副本都是一个完整的,而EC则是分片的,是以前数据分片的进一步优化过来的。因为数据节省空间,可以把一份数据切分成等分的十个分片,但是丢失了则无法找回,因此才有了EC编码。 而常见的是2+1, 4+2,8+2这样的方式其中加号后面的,则是冗余,也就是说,一份完整的数据,会切分成m分,然后计算校验码n份,一个完整的数据就有m+n分,最多允许丢失n份。 那么这里的原理也不难,其实就是一个数据矩阵是否可逆的问题,因为根据大学线性代数的基础,可逆矩阵总是有解的。而为了求解是否可逆,一般使用的是柯西矩阵或者范德蒙矩阵,当然,在工业界上使用的是伽罗瓦域去做的,这样求解的速度会快很多。具体的这些,大家可以去自行搜索纠删码,或者里的所罗门编码。 那么对于EC卷和副本卷,抛开原来来说,最大的问题就是对一致性要求不一样,副本卷极端情况下,只要有一个完整副本,那么都可以恢复回来的,但是EC卷不行,因为是对数据分片了,最多只能损坏n个分片。因此每次写入的时候,至少要保证m个数据分片是完整,否则直接无法恢复了。 另外在工程实现上,目前对于EC卷的实现有两种方式,一种是实时EC,也就是每次写入一堆数据(例如要求满4k,不满的则补齐),然后对其进行分片并且计算冗余码,然后下发到节点。另外一种则是先写入副本,然后把完整的副本转为EC编码,然后再删掉副本数据。
展开
2
vkingnew
2022-01-26
有机会请详细的讲解下Erasure code的原理和应用?有些数据不用是否可以销毁?应该有销毁的策略
共 1 条评论
1
尚春
2022-02-05
我们厂目前一些分层的思路: - 数据湖:主要存放一些对于读取性能要求不那么高的数据(Delta 格式,全量长周期数据),以及 ML 中用到的半结构化数据 - 数仓:主要存放一些需要快速读取的数据用于分析(AWS Redshift,只有近期详细数据和周期性汇总数据)