在 BigQuery 之上设计 API
Designing an API on top of BigQuery
我有一个 AppEngine 应用程序可以跟踪用户在多个网站上的各种印象数据。目前我们每月收集大约 4000 万条记录,主要 BigQuery table 在收集数据 6 周后接近 15Gb,我们的估计显示再过 6 周,我们将收集超过 1 亿条记录记录一个月。就大数据而言,这是一个相对较小的数据集,但有可能增长得相当快。
现在面对成功的试验,我们需要在 BigQuery 之上开发一个 API,它允许我们分析数据并将结果传送到我们提供的仪表板。
我担心的是,客户分析的大部分数据最多只持续几天(每个请求),而且由于 BigQuery 查询实际上是完整的 table 扫描,API 随着 table 大小的增长,BQ 需要处理更多数据才能 return 结果,及时响应会变慢。
因此我的问题是这样的。我们应该 table 分片 BigQuery 日志,例如按月或按周,以减少需要处理的数据,还是 "wiser" 预处理数据并将结果存储在NDB 数据存储?这将导致速度极快 API,但需要我们对所有内容进行预处理,甚至是一些客户可能永远不需要的东西。
或者我可能过早优化了?
根据我在 BigQuery 中分析类似项目性能的经验。如果您只关心性能,那么您不必更改任何内容。 BigQuery 的优化器可以解决很多问题,如果查询只使用 WHERE 几天 - 性能会很好。但从计费的角度来看,随着数据的增长,你支付的费用会越来越多,所以为了省钱——按月甚至按周对数据进行分片是明智的。使用 TABLE_RANGE,您仍然可以在需要时查询所有数据,因此您不会失去任何功能。
我有一个 AppEngine 应用程序可以跟踪用户在多个网站上的各种印象数据。目前我们每月收集大约 4000 万条记录,主要 BigQuery table 在收集数据 6 周后接近 15Gb,我们的估计显示再过 6 周,我们将收集超过 1 亿条记录记录一个月。就大数据而言,这是一个相对较小的数据集,但有可能增长得相当快。
现在面对成功的试验,我们需要在 BigQuery 之上开发一个 API,它允许我们分析数据并将结果传送到我们提供的仪表板。
我担心的是,客户分析的大部分数据最多只持续几天(每个请求),而且由于 BigQuery 查询实际上是完整的 table 扫描,API 随着 table 大小的增长,BQ 需要处理更多数据才能 return 结果,及时响应会变慢。
因此我的问题是这样的。我们应该 table 分片 BigQuery 日志,例如按月或按周,以减少需要处理的数据,还是 "wiser" 预处理数据并将结果存储在NDB 数据存储?这将导致速度极快 API,但需要我们对所有内容进行预处理,甚至是一些客户可能永远不需要的东西。
或者我可能过早优化了?
根据我在 BigQuery 中分析类似项目性能的经验。如果您只关心性能,那么您不必更改任何内容。 BigQuery 的优化器可以解决很多问题,如果查询只使用 WHERE 几天 - 性能会很好。但从计费的角度来看,随着数据的增长,你支付的费用会越来越多,所以为了省钱——按月甚至按周对数据进行分片是明智的。使用 TABLE_RANGE,您仍然可以在需要时查询所有数据,因此您不会失去任何功能。