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

标签 mysql node.js sequelize.js

如何使用Node.js在MySQL中存储Buffer
我知道的一种方法是将 Buffer 转换为 hex string 并将其保存为 MySQL 中的 CHAR 类型。但是在 MySQL 中保存之前之后转换是最佳实践吗?

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

或者实际上我使用什么样的方式并不重要,它们差别不大?

最佳答案

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

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

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

例如(假设 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 等)。

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

所以一定要妥善处理。

关于mysql - 在 MySQL 中存储 Node.js 缓冲区的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320613/

相关文章:

mysql - 使用 Sqoop 将来自 MySQL 的数据加载到 PIG 中

php - 固定成本 map 库或服务?

php - MySQL存储过程导致 `Commands out of sync`

javascript - 从字符串中解析 Vector3?

node.js - 如何使用嵌套模式更新 mongodb 中的文档

javascript - 你能在 Mongoose 中搜索其他带有实例方法的模型吗?

json - 使用 sequelize 防止将连接表数据添加到 json

javascript - Sequelize 多对多关系的 Controller

mysql - vb.net组合框仅显示1条记录

node.js - Express API Endpoint 从不返回数据。 Sequelize