我们的情况是,我们将不得不更新大量的数据(约5 Mio记录)在火基地定期。目前,我们有一些json文件,大小约为1GB。
由于现有的第三方解决方案(这里和这里)存在一些可靠性问题(每个对象导入对象;或需要开放连接),并且与google生态系统完全断开连接。我想知道现在是否有一种“官方”方式使用新的谷歌云功能?或者是与应用程序引擎/谷歌云存储/谷歌云数据存储的组合。
我真的不喜欢处理身份验证--云函数似乎处理得很好,但我假设函数会超时(?)
有了新的防火墙工具,如何:
发布于 2017-06-17 11:03:01
我终于发布了答案,因为它与2017年新的Google平台工具保持一致。
新引入的Google功能有大约9分钟的有限运行时间(540秒)。但是,云函数可以像这样从云存储中创建node.js读取流(@googlec头/存储在npm上)。
var gcs = require('@google-cloud/storage')({
// You don't need extra authentication when running the function
// online in the same project
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
// Reference an existing bucket.
var bucket = gcs.bucket('json-upload-bucket');
var remoteReadStream = bucket.file('superlarge.json').createReadStream();即使它是一个远程流,它也是高效的。在测试中,我能够在4分钟内解析大于3GB的jsons,执行简单的json转换。
正如我们现在使用node.js流一样,任何JSONStream库都可以高效地动态转换数据(JSONStream在npm中的应用),异步处理数据,就像使用事件流(npm上的事件流)的大型数组一样。
es = require('event-stream')
remoteReadStream.pipe(JSONStream.parse('objects.*'))
.pipe(es.map(function (data, callback(err, data)) {
console.error(data)
// Insert Data into Firebase.
callback(null, data) // ! Return data if you want to make further transformations.
}))在管道末尾的回调中只返回null,以防止内存泄漏阻塞整个函数。
如果您执行更重的需要更长运行时间的转换,可以使用火基中的“作业db”来跟踪您所在的位置,并且只执行100.000次转换并再次调用该函数,或者设置一个附加函数,该函数在插入到"forimport db“时侦听,该函数最终异步地将原始jsons对象记录转换为目标格式和生产系统。分割导入和计算。
此外,您还可以在nodejs应用程序引擎中运行云函数代码。但不一定相反。
https://stackoverflow.com/questions/44398442
复制相似问题