C#:
Stopwatch stopwatch2 = Stopwatch.StartNew();
TableDataInsertAllResponse response = await BigQueryService.Tabledata.InsertAll(request, _account.ProjectId, table.DataSetId, tableId).ExecuteAsync(ct);
stopwatch2.Stop();
JAVA:
long start = System.currentTimeMillis();
TableDataInsertAllResponse response = mBigquery.tabledata().insertAll(mAccount.getProjectId(), tid.getDatasetId(),tid.getDefaultTableId(), request).execute();
logger.fatal(String.format("%s~BigQuery.InsertAll#Back~%s~%s~%s~%s",FormatHelper.getCurrentDateTime(), rowList.size(), tid,System.currentTimeMillis()-start, payLoad));
当我们将这两者与同一数据集和同一台机器进行比较时,C#通常比Java调用慢3-5倍(> 500ms vs~100ms)。我们尽可能深入地追踪到BQ API源代码,并发现它们基本上具有相同的数据处理:序列化数据到json,然后执行gzip然后通过http调用发送出去。它只是没有意义,C#http调用可能会那么慢。我们认为我们需要BigQuery方面对我们特定案例的技术支持,以了解BQ收到我们的请求后会发生什么。如果任何非常特定的有效负载差异导致性能差异。 我们需要获得什么级别的支持服务?
修改 一些附加组件:现在,我们的c#解决方案都是异步的(在c#中使用async和await)。我找到了PHP的帖子BigQuery streaming 'insertAll' performance with PHP。我在这篇文章中遇到了同样的问题。我们的应用程序不能等待超过100毫秒的请求。我们可以忘记将它与Java进行比较,但我们只需要c#调用就可以更快地运行。我想知道是否可以对C#进行InsertAll()或我们方面的任何改进。