【问题标题】:Best practice on storing Node.js Buffer in MySQL在 MySQL 中存储 Node.js Buffer 的最佳实践
【发布时间】:2018-04-29 10:58:54
【问题描述】:

如何使用 Node.js 在 MySQL 中存储 Buffer
我知道的一种方法是将Buffer 转换为十六进制字符串 并将其保存为CHAR 在MySQL 中的类型。但是在 MySQL 中转换 beforeafter 保存是最佳实践吗?

有没有办法可以直接用Node.js在MySQL中保存和获取Buffer(字节数组),比如在MySQL中使用BLOB

或者实际上我使用哪种方式并不重要,它们并没有太大区别?

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    我不知道最佳做法。但我可以分享对我有用的东西。

    如果我正在处理对象,我更喜欢将它们存储为 base64(以减少 base16 上的字符长度)在 longtext 列中并压缩它们。

    我认为将它们存储为字符串更有帮助,因为如果将它们存储为缓冲区,那么我认为没有办法将它们从数据库中复制出来(有时这对故障排除很有帮助),并翻译他们回到你的对象 - 至少,我还没有找到办法。

    例如(假设Buffer.from()语法的Nodejs 6+,否则使用new Buffer()):

    const obj = {};
    const zip = zlib.gzipSync(JSON.stringify(obj)).toString('base64');
    

    然后,撤消:

    const originalObj = JSON.parse(zlib.unzipSync(Buffer.from(zip, 'base64')));
    

    因为longtext 等于 ~4GiB,所以你永远不应该达到极限,除非你有巨大的物体。但是我想你在其他地方遇到了效率问题。

    注意: 很明显,一行中包含了很多内容(即 zip、解析、缓冲区等)。

    这一行可能会失败很多。

    所以一定要妥善处理。

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2011-01-20
      • 2010-11-10
      • 2010-11-08
      • 2011-11-23
      • 2015-04-23
      • 2010-10-05
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多