我正在实现公司中用于“自动”数据提取的第一个管道。我们的客户不想让我们在他们的数据库中进行任何呼叫(甚至创建副本等)。到目前为止,我认为最好的解决方案是端点(让它们将数据推送到存储中),以便我们可以使用它并进行所有数据科学过程。我的云提供商是Google Cloud,我的客户端使用MySQL Server。
我已经阅读了很多网络主题,并访问了以下链接:
Google Cloud Data Lifecycle-对于批处理,它谈到了云存储,云传输设备,传输设备
Signed URLs-这些URL是有时间限制的资源,可以访问例如Google Cloud Storage并将数据写入其中。
我的简单解决方案是用户签名URL->云存储->数据流-> BigQuery。这是个好方法吗?
总而言之,我对最佳做法和允许用户在不暴露其数据或我的基础结构的情况下在GCP中插入数据的可能方式的建议。
约束:
这里可能不需要签名的URL和数据流。当您不希望用户拥有Google帐户访问Cloud Storage时通常使用签名URL,但在处理resumable uploads时也要加倍注意。如果您知道客户在推送数据时将拥有一个Google帐户,则可以跳过该帐户(尤其是因为代码是在后端而不是在客户的移动应用程序中运行,因此不需要超时来保护私钥)。您可以简单地使用App Engine创建一个基本的Web应用,客户端将使用该应用执行每日推送,然后将其上传到Cloud Storage存储桶并执行resumable upload。 App Engine还将确保文件格式正确,并遵循您在上传之前定义的特定限制。
至于Dataflow,由于它的最佳用途是用于流传输,并且在您的情况下,它是被动的批处理摄取,因此,当您只需要一天仅进行一次转换时,为不断运行的服务付费可能不是最好的方法。效率更高的方法是使用Cloud Functions预处理和应用转换,在Cloud Storage存储桶中将其转换为triggered乘object change notification。然后,该函数将使用其API将数据推送到BigQuery。
完整的流程将是:App Engine Web App清除了转储->存储API->桶对象更改通知->触发云功能(CF)-> CF下载对象-> CF执行转换-> CF将行保存到BigQuery
GAE-> GCS-> CF-> BQ