我想在Google云端设计一个大型的Web应用,我需要一个OLAP系统来创建机器学习模型,我计划通过Pub/Sub将所有数据发送到一个BigTable数据湖中。模型由dataproc进程创建。
模型被部署到微服务中,这些微服务在用户会话数据上执行它们。我的问题是:我应该如何存储这些微服务的“普通业务数据”?我是否需要将提供Web应用的微服务的数据与数据湖中的数据分开,例如,通过使用MariaDB实例(每个用户服务一个数据库)?还是我可以将它们与BigTable连接?
关于数据湖:有没有BigTable的替代方案?另一位开发者告诉我,一个选择是将数据存储在Google Cloud Storage(Buckets)上,并通过DataProc访问这些数据,以节省BigTable的跨区域成本。
回答:
哇,很多问题,很多假设和很多可能性。最好的回答是“一切都取决于你的需求”!
我应该如何存储这些微服务的“普通业务数据”?
你想在这些微服务中做什么?
- 关系数据?使用关系数据库,如Cloud SQL上的MySQL或PostgreSQL
- 面向文档的存储?如果文档查询是“非常简单”(非常),使用Firestore或Datastore。否则,你可以考虑合作伙伴或市场解决方案,如MongoDB Atlas或Elastic
还是我可以将它们与BigTable连接?
是的,你可以,但你需要这样做吗?如果你需要在处理前访问原始数据,是的,连接到BigTable并查询它!
如果不需要,最好有一个批处理过程来预处理原始数据,并只将摘要存储在关系或文档数据库中(用户延迟更低,但细节更少)
有没有BigTable的替代方案?
这取决于你的需求。BigTable对于高吞吐量非常出色。如果你的流式写入每秒少于100万,你可以考虑BigQuery。你还可以通过联合表使用BigQuery引擎查询BigTable表
BigTable、BigQuery和Cloud Storage都可以通过dataproc访问,所以按你的需求来!
另一位开发者告诉我,一个选择是将数据存储在Google Cloud Storage(Buckets)上
是的,你可以流式传输到Cloud Storage,但要小心,你没有校验和验证,因此你无法确保数据未被损坏。
注意
你可以以其他方式思考你的应用。如果你将事件发布到PubSub,一个常见的模式是使用Dataflow处理它们,至少对于预处理 —— 这样你的dataproc作业用于训练模型会更简单!
如果你训练Tensorflow模型,你也可以考虑BigQuery ML,不是用于训练(除非标准模型适合你的需求,但我怀疑),而是用于服务部分。
- 将你的tensorflow模型加载到BigQueryML中
- 简单地使用BigQuery查询你的数据作为模型的输入,将它们提交给模型并立即获得预测。你可以使用
Insert Select
查询直接将预测存储到BigQuery中。预测处理是免费的,你只需支付BigQuery中扫描的数据费用!
正如我所说,有很多可能性。缩小你的问题范围以获得更精确的答案!无论如何,希望这对你有帮助