【问题标题】:Base64 MySQL storage space optimalisationBase64 MySQL存储空间优化
【发布时间】:2017-02-06 13:37:34
【问题描述】:

我有很多 base64_encoded 字符串保存在我的 MySQL 数据库中。但是,由于 base64_encoded 字符串大了 33%,我想知道如何优化我的数据库存储(现在我将字符串存储在 LONGTEXT 字段中,但是 LONGBLOB 或类似的东西呢?)。那么,如何更优化地保存我的数据(现在是 base64 编码)以节省存储空间...(选择值时,我仍然必须能够再次安全地对其进行 base64 编码)。

谢谢

【问题讨论】:

标签: mysql optimization base64 storage


【解决方案1】:

如果您有 5.6.1 或更高版本,FROM/TO_BASE64() 在 MySQL 中可用。

Base64 是纯 ascii 文本。将 base64 存储在 TEXT 中没有问题。不需要转义,因为(我认为)没有顽皮的角色。但是存储 FROM_BASE64 的结果需要BLOB(一定大小)。

所以...

INSERT INTO t (myblob) VALUES ( FROM_BASE64('UmljayBKYW1lcw==') );

SELECT TO_BASE64(myblob) FROM t;

FROM_BASE64 将重建原始(pre-base64)数据。

最好是压缩:

INSERT INTO t (myblob) VALUES ( COMPRESS('UmljayBKYW1lcw==') );

SELECT UNCOMPRESS(myblob) FROM t;

这样,如果原始(base64 之前的)数据是可压缩的,您将(可能)获得超过 33% 的数据。如果原始数据是.jpg 或其他一些已经压缩的数据,那么您不妨使用FROM_BASE64 而不是COMPRESS

【讨论】:

  • 那么,将 to_base64 与 compress 结合使用会为我节省 base64_encoded 的 33.3% 开销吗?所以我将使用 COMPRESS(TO_BASE64(STRING)) 并选择 UNCOMPRESS(FROM_BASE64(SELECTED STRING)) ?
  • 这取决于你从什么开始。听起来有些东西正在生成 base64 字符串,并且您想将它们紧凑地存储在表中。在这种情况下,无需在压缩前重复转换 TO_BASE64。 (注意:我修正了我的答案。)
  • 瑞克,谢谢,我会试试这个。此外,您在第一个示例中调用 FROM_BASE64 两次是否正确?
  • 感谢 Ricks,但是当我使用压缩时,大小并没有改变。这怎么可能?该字符串需要 200kb 的存储空间,压缩后仍需要 200kb 的存储空间
  • 你是说你拿了200KB的base64文本,压缩它,然后SELECT LENGTH(myblob)出来大约200K?原始数据(转换为 base64 之前)是图像还是其他已经压缩的东西?在这种情况下,原始数据和压缩结果将大约相同——而 base64 将大 25% 左右。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多