【问题标题】:How can I compress similar rows?如何压缩相似的行?
【发布时间】:2016-09-02 00:05:23
【问题描述】:

我在键值数据库中存储了大量大小不一 (~10-100kb) 的 blob。行是附加的,从不删除。

由于许多 blob 非常相似,如果将它们连接起来,就可以高度压缩它们。但是,考虑到数据位于不同的行中,这在此处应用并非易事。

是否有一种相当简单的方法来压缩它们,或者至少删除部分冗余?

【问题讨论】:

  • 在数据库中存储 BLOBS 从来都不是一个好习惯。您应该将 PATHS 存储到这些文件中。
  • @Bob 我预计平均有 20kb 的 180M blob,我需要通过 2 个不同的键访问这些 blob,有时还通过 blob 的某些属性进行过滤 - 数据库不是比那里的文件更可取,如果只是为了更复杂场景的可扩展性?这不像我在那里存储大图像。
  • 我不会用 BLOBS 膨胀我的数据库。特别是 SQLite 数据库。
  • 当然,我也不是它的忠实粉丝!但是您真的更喜欢拥有 180M 的文件吗?然后手动执行select * from foo where content like '%string%' 或类似操作?对我来说这听起来不可行。
  • 如果是这样...不,我想不出除了使用这些 BLOBS 之外的任何其他方法。但我什至想不出任何“压缩”它们的方法。

标签: database compression


【解决方案1】:

有些压缩库使用字典,即预先计算数据的通用库。该字典有助于将许多项目共享的数据压缩一次。要创建字典,通常会将要压缩的项目样本提供给压缩库,以便它可以从中派生出有用的通用数据包。

这将有助于单独压缩所有项目,同时保持接近单个“实体”存档的压缩率。

zstd 就是这样一个库的一个例子,毫无疑问还有很多其他的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多