Big table 与时间序列数据的 Big Query 用例
Big table vs Big Query usecase for timeseries data
我希望最终确定我的时间序列数据用例的 Big table 与 Big Query。
我经历了https://cloud.google.com/bigtable/docs/schema-design-time-series
这用于存储 Omniture 数据,其中包含网站访问者密钥(一些长密钥)、他的 cookie ID(一些长密钥)、他的 IP 的时间戳系列数据网络点击、cookie
Big table 的 rowkey 可以用什么?正如我从最佳实践中学到的,我不能使用时间戳或 CookieId 作为前缀。但是应该有一个标识符(最好是字母表?),然后是时间序列后缀。今天的数据量为 5 亿,52 列存储在 SQL table 中。我认为数据可能会根据 OLTP 处理进行更新。但是 table 稍后会在时间序列数据上查询,以进行类似 OLAP 处理。
a) Big table 会是这里的最佳选择,还是我应该使用 Big Query,因为稍后根据时间序列数据进行查询会帮助我更多?
b) 如果使用 Big table,最好的行键是什么,因为时间序列是我为我的数据看到的唯一意义过滤器。我相信,使用 table 中的其他字段,如 visitorkey、cookieid ids(Long ids)作为带有时间戳的前缀,仍然会导致整个数据填满 Bigtable 中的 1 个节点,而不是分发。
请告诉我。
(我是 Cloud Bigtable 团队的工程师)
正如您从我们的文档中发现的那样,行键格式是您在使用 Bigtable 时做出的最大决定,因为它决定了可以有效执行哪些访问模式。在我看来,在时间戳之前使用 visitorKey + cookie 作为前缀可以避免热点问题,因为几乎可以肯定,您网站的访问者比集群中的节点多得多。 Bigtable 一直在为这些类型的时间序列用例服务!
但是,您也来自 SQL 架构,它并不总是适合 Bigtable 的 schema/query 模型。所以这里有一些问题可以帮助您入门:
- 您是否打算执行大量临时查询,例如 "SELECT A FROM Bigtable WHERE B=x"?如果是这样,强烈推荐 BigQuery。如果不执行完整 table 扫描,Bigtable 将无法支持此查询。一般来说,Bigtable 更适合将简单的数据子集快速流回数据流作业,而不是在查询本身中嵌入复杂的处理。
- 您需要多行 OLTP 事务吗?同样,使用 BigQuery,因为 Bigtable 仅支持单行内的事务。
- 您是否以高 QPS 直播新赛事? Bigtable 更适合这类大容量更新。请记住,Bigtable 的最初目的是作为 Google 搜索索引中网络爬虫更新的随机访问接收器!
- 您想对数据执行任何类型的大规模复杂转换吗?同样,Bigtable 在这里可能更好,因为您可以更快地将数据流出和流回,并让 Dataflow 作业中的自定义业务逻辑做任何您想做的事情。
如果您需要这些功能的某种组合,您也可以将这两种服务结合起来。例如,假设您一直在接收大量更新,但希望能够执行复杂的即席查询。如果您可以使用稍微延迟的数据版本,将更新写入 Bigtable,然后使用 Dataflow 定期扫描 table 并导出 post 可能是有意义的- 将最新事件的处理版本放入 BigQuery。 GCP 还允许 BigQuery 在某些区域直接从 Bigtable 提供查询服务:https://cloud.google.com/bigquery/external-data-bigtable
我希望最终确定我的时间序列数据用例的 Big table 与 Big Query。
我经历了https://cloud.google.com/bigtable/docs/schema-design-time-series
这用于存储 Omniture 数据,其中包含网站访问者密钥(一些长密钥)、他的 cookie ID(一些长密钥)、他的 IP 的时间戳系列数据网络点击、cookie
Big table 的 rowkey 可以用什么?正如我从最佳实践中学到的,我不能使用时间戳或 CookieId 作为前缀。但是应该有一个标识符(最好是字母表?),然后是时间序列后缀。今天的数据量为 5 亿,52 列存储在 SQL table 中。我认为数据可能会根据 OLTP 处理进行更新。但是 table 稍后会在时间序列数据上查询,以进行类似 OLAP 处理。
a) Big table 会是这里的最佳选择,还是我应该使用 Big Query,因为稍后根据时间序列数据进行查询会帮助我更多? b) 如果使用 Big table,最好的行键是什么,因为时间序列是我为我的数据看到的唯一意义过滤器。我相信,使用 table 中的其他字段,如 visitorkey、cookieid ids(Long ids)作为带有时间戳的前缀,仍然会导致整个数据填满 Bigtable 中的 1 个节点,而不是分发。
请告诉我。
(我是 Cloud Bigtable 团队的工程师)
正如您从我们的文档中发现的那样,行键格式是您在使用 Bigtable 时做出的最大决定,因为它决定了可以有效执行哪些访问模式。在我看来,在时间戳之前使用 visitorKey + cookie 作为前缀可以避免热点问题,因为几乎可以肯定,您网站的访问者比集群中的节点多得多。 Bigtable 一直在为这些类型的时间序列用例服务!
但是,您也来自 SQL 架构,它并不总是适合 Bigtable 的 schema/query 模型。所以这里有一些问题可以帮助您入门:
- 您是否打算执行大量临时查询,例如 "SELECT A FROM Bigtable WHERE B=x"?如果是这样,强烈推荐 BigQuery。如果不执行完整 table 扫描,Bigtable 将无法支持此查询。一般来说,Bigtable 更适合将简单的数据子集快速流回数据流作业,而不是在查询本身中嵌入复杂的处理。
- 您需要多行 OLTP 事务吗?同样,使用 BigQuery,因为 Bigtable 仅支持单行内的事务。
- 您是否以高 QPS 直播新赛事? Bigtable 更适合这类大容量更新。请记住,Bigtable 的最初目的是作为 Google 搜索索引中网络爬虫更新的随机访问接收器!
- 您想对数据执行任何类型的大规模复杂转换吗?同样,Bigtable 在这里可能更好,因为您可以更快地将数据流出和流回,并让 Dataflow 作业中的自定义业务逻辑做任何您想做的事情。
如果您需要这些功能的某种组合,您也可以将这两种服务结合起来。例如,假设您一直在接收大量更新,但希望能够执行复杂的即席查询。如果您可以使用稍微延迟的数据版本,将更新写入 Bigtable,然后使用 Dataflow 定期扫描 table 并导出 post 可能是有意义的- 将最新事件的处理版本放入 BigQuery。 GCP 还允许 BigQuery 在某些区域直接从 Bigtable 提供查询服务:https://cloud.google.com/bigquery/external-data-bigtable