在BigQuery

时间:2015-06-13 11:21:42

标签: google-app-engine bigdata google-bigquery

我有一个AppEngine应用程序,可以跟踪用户在多个网站上的各种展示数据。目前,我们每月收集大约4千万条记录,主要的BigQuery表格在收集数据6周后收到15Gb的大小,我们的估计显示,在6周内,我们将收集超过1亿条记录月。就bigdata而言,这是一个相对较小的数据集,但有可能相当快地增长。

现在面对一个成功的试验,我们需要处理一个位于BigQuery之上的API,它允许我们分析数据并将结果传递给我们提供的仪表板。

我担心的是,客户分析的大多数数据最多只能在几天内(每个请求),而且由于BigQuery查询实际上是全表扫描,因此API可能会随着时间的推移而变慢。表的大小增加,BQ需要处理更多数据才能返回结果。

因此我的问题是这样的。我们是否应该对BigQuery日志表进行分片,例如按月或按周分类,以减少需要处理的数据,或者它是否会更加明智?#34;预处理数据并将结果存储在NDB数据存储区中?这将导致一个超快的API,但需要我们预处理所有内容,甚至是一些客户可能永远不需要的东西。

或者我可能过早地进行优化?

1 个答案:

答案 0 :(得分:1)

根据我在BigQuery中分析类似项目的性能的经验。如果您只关心表现,那么您不必改变任何事情。 BigQuery的优化器可以找出很多东西,如果查询仅在几天内使用WHERE,那么性能就会很好。但从账单的角度来看,随着数据的增长,您将支付越来越多的费用,因此为了节省资金 - 按月或甚至按周分类数据是明智的。使用TABLE_RANGE,如果您需要,您仍然可以查询所有数据,因此您不会丢失任何功能。