Google 用于存储大量事件的 Bigtable 与 BigQuery

Google Bigtable vs BigQuery for storing large number of events

背景

我们希望将 immutable 事件存储在(最好)托管服务中。一个事件的平均大小小于 1 Kb,我们每秒有 1-5 个事件。存储这些事件的主要原因是一旦我们创建了可能对这些事件感兴趣的未来服务,就能够重放它们(可能使用 table 扫描)。由于我们在 Google 云中,我们显然将 Google 的服务视为首选。

我怀疑 Bigtable would be a good fit for this but according to the price calculator 我们每个月要花费超过 1400 美元(这对我们来说是一笔 交易):

查看类似 BigQuery 的价格为每月 3 美元(如果我没有遗漏一些重要信息):

即使无模式数据库更适合我们,我们也可以将我们的事件基本上存储为带有一些元数据的 blob。

问题

我们可以为此使用 BigQuery 而不是 Bigtable 来降低成本吗?例如,BigQuery 有一个叫做 streaming inserts 的东西,对我来说似乎是我们可以使用的东西。如果沿着这条路走,有没有什么我可能没有意识到的短期或长期影响?

Bigtable 非常适合大型 (>= 1TB) 可变数据集。它在负载下具有低延迟并由 Google 管理。对于您的情况,我认为您使用 BigQuery 的方向正确。

很难总结得比 already done by Google

我认为您需要弄清楚您将如何使用(重放)您的数据(事件),这可以帮助您做出最终决定。

到目前为止,BigQuery 看起来是您的最佳选择

总成本归结为您'query'数据的频率。如果它是一个备份并且你不经常重播事件,那么它会非常便宜。但是,如果您需要每天重放一次,就会很容易开始触发扫描的 5 美元/TB。我们也对插入和存储的便宜程度感到惊讶,但这是正常的,因为 Google 希望您在某个时间点对它们进行 运行 昂贵的查询。不过,您必须围绕一些事情进行设计。例如。 AFAIK 流式插入没有被写入 table 的保证,您必须经常轮询列表的尾部以查看它是否真的被写入。不过,可以使用时间范围 table 装饰器有效地完成拖尾(无需支付扫描整个数据集的费用)。

如果您不在乎顺序,您甚至可以免费列出一个table。那么就不需要 运行 一个 'query'。

仅供参考

Cloud Bigtable 不是关系型数据库;它不支持 SQL 查询或连接,也不支持 multi-row 事务。 此外,对于少量数据 (< 1 TB),这不是一个好的解决方案。

考虑这些情况: - 如果您需要完整的 SQL 在线交易处理支持 (OLTP) 系统,考虑 Google 云 SQL.

如果在线分析处理中需要交互式查询 (OLAP) 系统,考虑 Google BigQuery.

如果您需要存储大于 10 MB 的不可变 blob,例如 large 图片或电影,请考虑 Google Cloud Storage.

如果您需要存储高度结构化的对象,或者如果您需要 支持 ACID 事务和 SQL-like 查询,考虑 Cloud 数据存储.

此流程图可能有助于在不同的 Google 云存储产品之间做出决定(免责声明!从 Google 云页面复制此图像)

如果您的用例是一个实时数据库(比方说,一个网站的后端),BigTable 就是您所需要的(仍然 不是 确实是一个 OLTP 系统)。如果它更像是一种数据分析/数据仓库类型的用途,那么 BigQuery 就是您所需要的。

想想 OLTP 与 OLAP;或者如果你熟悉 Cassandra 和 Hadoop,BigTable 大致等同于 Cassandra,BigQuery 大致等同于 Hadoop(同意,不是一个公平的比较,但你明白了)

https://cloud.google.com/images/storage-options/flowchart.svg

请记住 Bigtable 不是关系数据库,它是一个没有 SQL 解决方案,没有任何 SQL 功能,如 JOIN 等。如果你想要 RDBMS OLTP,您可能需要查看 cloudSQL (mysql/ postgres) 或 spanner.

云扳手比较年轻,但实力强大,前途无量。至少,google 营销声称它的功能是两全其美(传统 RDBMS 和非 SQL)

成本方面

这里已经很好地涵盖了成本方面

我知道这是一个很晚的答案,但无论如何添加它以防将来它可能对其他人有所帮助。

Bigtable 是用于管理海量数据的应用程序的分布式(运行 集群)数据库。它专为海量非结构化数据而设计,可水平扩展并由列族组成。它将数据存储在键值对中,而不是关系数据库或结构化数据库。

BigQuery 是一个数据仓库应用程序。这意味着它提供了与多个数据源或流的连接,以便可以将它们提取、转换并加载到 bigQuery table 中以供进一步分析。与 Bigtable 不同,它确实以结构化 table 存储数据并支持 SQL 查询。

用例;如果您想通过从组织的不同来源(应用程序、研究、调查、反馈、日志等)收集的数据中获得洞察力来进行分析或商业智能,您可能希望将所有这些信息集中到一个位置。此位置很可能是 Bigquery 数据仓库。

如果您有一个应用程序收集大数据,换句话说,每次以更高的速度(高速)和非结构化的不一致形式收集大量信息(高数据量),具有音频、文本、视频等不同数据类型,图像等...(多样性和准确性),那么您可能为该应用程序选择的数据库应用程序将是 Bigtable.