使用 zfs 存储池也能对数据库存储的数据进行字节存储?

3 天前
 MRlaopeng

看了这个帖子的楼主回复 https://www.v2ex.com/t/1102533#reply10

@ryd994 就因为 zfs 有 dedup 才用的,省硬盘。如果不用的话,为啥不直接 mdadm,组软 raid ,后期直接上 raid 卡也成。

我百度查了下去重的可选项

文件级的去重对文件作为整体来计算 hash 签名,如果处理的是自然的文件,则此方法需要的消耗最小,但是缺点是对文件的任何修改都需要重新计算文件的 hash 签名,即对文件的任何修改,将使得此文件之前节约的空间消失,因为两个文件将不再相同。此中方法比较适合类似于文件 JPEG ,MPEG ,但是对于像虚拟机镜像(大文件)文件将无效,因为即使他们只是很小的一部分不同,但是文件级别他们将是不同的文件。

块级别的去重(相同大小的块),相比文件级的去重,需要更多的计算消耗,但是他能够很好地对像虚拟机镜像类似的大文件去重。大部分的虚拟机镜像文件是重复数据,例如镜像文件中的操作系统部分。使用块级的去重将使得只有镜像特别的数据才占用额外的空间,相同的数据将共享。

字节级别的去重,将需要更多的计算消耗来决定重复数据的开始和结束区域,不管怎么说,此方法对 mail 服务器来说是理想的选择,例如一个邮件的附件可能出现很多次,但是使用块级别去重时他们并不能被优化。此类型的去重一般用来一些应用程序的去重中,例如 exchangeserver ,因为应用程序知道他管理的数据,可以在内部容易地去重。

那我开启字节级别去重 ,不久相当于把数据库中的字段重复数据进行去重了?

344 次点击
所在节点    问与答
5 条回复
iBugOne
2 天前
不用想了,zfs 没这么离谱的功能,能按 recordsize/volblocksize 进行块级别的去重就不错了
MRlaopeng
2 天前
@iBugOne 哈哈 是 ibug 大佬 我刚看了你的文章
https://ibug.io/blog/2024/08/nju-talk/#/mirrors
MRlaopeng
2 天前
@iBugOne 好吧,我也是想节省点硬盘,才冒出这个想法
ryd994
2 天前
“那我开启字节级别去重 ,不久相当于把数据库中的字段重复数据进行去重了?”

zfs 的粒度没这么细。zfs 的块大小一般是 4kb 到几 mb 。除非你数据库里都是大段的原始数据(数据库不应该这么用),否则 zfs 的 dedup 对你真没什么用。

正文中的给虚拟机去重实际上大概率也没用。因为虚拟磁盘的内容未必能对齐到块边界,所以实际去重效果也很差。真正能有效利用到 zfs 去重的场景很少。也就是我说的一般人用不到去重功能。
ericFork
2 天前
为了省硬盘,那开启压缩也是一个方向啊,CPU 过剩的前提下,lz4 或者 zstd-fast 带来的那点额外的 CPU 开销可以接受

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1102667

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX