bigquery操作是异步执行的,存储操作如何?

时间:2017-08-21 21:50:10

标签: google-bigquery google-cloud-storage

https://cloud.google.com/storage/docs/object-basics

function upload_object($bucketName, $objectName, $source)
{
  $storage = new StorageClient();
  $file = fopen($source, 'r');
  $bucket = $storage->bucket($bucketName);
  $object = $bucket->upload($file, [
    'name' => $objectName
  ]);
  printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), 
  $bucketName, $objectName);
}

与bigquery操作相比,由于大多数bigquery操作需要很长时间才能完成,因此它们是异步执行的。见https://cloud.google.com/bigquery/docs/managing-jobs

例如当我们使用bigquery客户端将数据导出到存储时。

现在,当我们使用存储客户端加载数据时,

我的问题是存储声明

$object = $bucket->upload($file, [
  'name' => $objectName
]);

这个语句是异步执行的吗?由于文档没有显示它是异步执行的,我认为它不是。

谢谢!

1 个答案:

答案 0 :(得分:2)

API同步有两个部分 - 服务本身和客户端库。 BigQuery服务是异步的,因为它返回"操作"令牌,您必须轮询以查看该操作何时完成。 GCS服务是同步的,因为当上载API调用完成(或最终调用可恢复的上载)时,该对象就位。

然而,即使使用同步服务,您也可能拥有一个客户端库,因为它可以在后台线程中进行上传,同时您的代码继续使用某种承诺或未来对象。 PHP client library upload method is synchronous, however

TL; DR:在PHP中上传到GCS是同步的。通话结束后,您的对象就位。