V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MRlaopeng
V2EX  ›  问与答

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

  •  
  •   MRlaopeng · 2 天前 · 331 次点击

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

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

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

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

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

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

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

    5 条回复    2025-01-05 22:58:17 +08:00
    iBugOne
        1
    iBugOne  
       2 天前 via Android   ❤️ 1
    不用想了,zfs 没这么离谱的功能,能按 recordsize/volblocksize 进行块级别的去重就不错了
    MRlaopeng
        2
    MRlaopeng  
    OP
       2 天前
    @iBugOne 哈哈 是 ibug 大佬 我刚看了你的文章
    https://ibug.io/blog/2024/08/nju-talk/#/mirrors
    MRlaopeng
        3
    MRlaopeng  
    OP
       2 天前
    @iBugOne 好吧,我也是想节省点硬盘,才冒出这个想法
    ryd994
        4
    ryd994  
       2 天前 via Android
    “那我开启字节级别去重 ,不久相当于把数据库中的字段重复数据进行去重了?”

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

    正文中的给虚拟机去重实际上大概率也没用。因为虚拟磁盘的内容未必能对齐到块边界,所以实际去重效果也很差。真正能有效利用到 zfs 去重的场景很少。也就是我说的一般人用不到去重功能。
    ericFork
        5
    ericFork  
       1 天前
    为了省硬盘,那开启压缩也是一个方向啊,CPU 过剩的前提下,lz4 或者 zstd-fast 带来的那点额外的 CPU 开销可以接受
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.