Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该为每一行插入调用BigQuery还是插入一个大容量?_Node.js_Performance_Express_Google Bigquery - Fatal编程技术网

Node.js 我应该为每一行插入调用BigQuery还是插入一个大容量?

Node.js 我应该为每一行插入调用BigQuery还是插入一个大容量?,node.js,performance,express,google-bigquery,Node.js,Performance,Express,Google Bigquery,我有一个NodeJs服务(基于Express构建),每天有100万个请求,对于每个请求,一个新的数据行被发送到BigQuery。 从性能角度看,继续单独发送行更好,还是应该收集行并每隔X秒/分钟将它们作为批量发送到BigQuery?(调用是异步完成的) 我的BigQuery存储库类如下所示:(在Express服务启动时,通过调用.init()初始化存储库,并为每一行插入服务调用.add()) 我不确定问题中是否有足够的信息来提供一个简单的答案,因为您当前的每请求事务处理方法似乎没有达到任何硬限制

我有一个NodeJs服务(基于Express构建),每天有100万个请求,对于每个请求,一个新的数据行被发送到BigQuery。 从性能角度看,继续单独发送行更好,还是应该收集行并每隔X秒/分钟将它们作为批量发送到BigQuery?(调用是异步完成的)

我的BigQuery存储库类如下所示:(在Express服务启动时,通过调用.init()初始化存储库,并为每一行插入服务调用.add())


我不确定问题中是否有足够的信息来提供一个简单的答案,因为您当前的每请求事务处理方法似乎没有达到任何硬限制。收集执行批量事务的请求可能有助于限制网络I/O,但如果服务在每次批量事务之间失败,则可能会丢失事务。我建议您进行性能测试,以直接比较每种方法,并了解它们在您的用例中的优缺点

最后一件您忽略的事情可能是成本,这取决于单个行的大小。基于以下原因:

单个行的最小大小为1 KB


根据对象的大小,如果您的行足够小,则可能会被多收费,除非您将它们捆绑到批量事务中。

您正在寻找什么的性能优化?消费者;节点;服务器RAM/CPU?起初我的目标是服务器CPU负载,但我认为所有性能标准都很有趣
function BQRepository() {
}

BQRepository.prototype.init = async function() {
    this.bigQueryClient = new BigQuery({ projectId: ..., keyFilename: ... });    
}

BQRepository.prototype.add = async function(tableName, obj) {
    this.bigQueryClient
        .dataset(...)
        .table(tableName)
        .insert(obj)
        .then(() => {
          logger.debug(`object added`)
        })
        .catch(err => {
                    logger.error('error occurred')
        });
}

var bqRepo = new BQRepository()
module.exports = bqRepo;