【发布时间】:2018-10-18 18:04:34
【问题描述】:
我正在构建一个分析平台,我想先压缩我的 ETL(提取转换负载)作业,然后再将它们存储到我的数据库中。在我开始编写代码之前,我想知道是否有经验的人可以告诉我如何正确地完成它。我想 gzip 数据,然后将其转换为 base64 字符串。我只是简单地 gzip,然后转换为 base64 还是不行?
这是我目前用于这些大型数据集的过程。
var streamObj = athenaClient.execute('my query').toStream()
var data = [];
redis.set('Some Dashboard Data', '[')
streamObj.on('data', function(record) {
// TODO gzip record then convert to base64
if (data.length === 500) {
let tempData = JSON.stringify(data);
data = []
redis.append('Some Dashboard Data', tempData.slice(1, tempData.length - 1) + ',')
}
data.push(record);
})
}
如果这不可行,有没有办法存储压缩后的字符串?
【问题讨论】:
-
为什么 data.length === 500 ?你就是这样分流的吗?
-
如果我不这样做,节点会耗尽内存并导致堆栈溢出;)
-
我可以将它写入一个临时文件,然后压缩整个文件吗?
-
正在谈论 20mb 的数据
-
我认为在您的 if 条件下,您可以尝试暂停读取流,进行 gzip 和 base64 转换,将其保存在 redis 中,并在成功恢复流时。这样您就不会有多余的数据
标签: javascript node.js zlib amazon-athena node-redis