在MySQL中存储Node.js缓冲区的最佳实践

时间:2017-11-16 02:34:53

标签: mysql node.js sequelize.js

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

有没有一种方法可以直接保存并使用Node.js获取MySQL中的Buffer(字节数组),例如,在MySQL中使用BLOB

或者实际上我使用的方式并不重要,它们之间的区别并不大?

1 个答案:

答案 0 :(得分:2)

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

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

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

例如(假设Nodejs 6+用于Buffer.from()语法,否则使用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,parse,buffer等)。

很多都可能在一行中失败。

因此,请确保妥善处理。