解决方案来托管200GB的数据并为聚合提供JSON API?

时间:2016-07-12 18:02:14

标签: google-bigquery google-cloud-datastore bigtable

我正在寻找一种解决方案,它将托管几乎静态的200GB,结构化,干净的数据集,并在数据上提供JSON API,以便在Web应用程序中进行查询。

我的数据的每一行都是这样的,我有大约7亿行:

parent_org,org,spend,count,product_code,product_name,date
A31,A81001,1003223.2,14,QX0081,Rosiflora,2014-01-01

数据几乎完全是静态的 - 它每月更新一次。我想支持简单的聚合查询,例如:

  • 按产品代码总计QX开始,按组织,按月
  • 按月支付母公司A31的总支出

我希望通过RESTful JSON API提供这些查询,以便我可以在Web应用程序中使用这些数据。

我不需要加入,我只有一张桌子。

我调查的解决方案:

  • 到目前为止,我一直在使用Postgres(使用网络应用程序提供API),但我开始达到使用索引和物化视图所能做的极限,没有专用硬件+比我更多的技能
  • Google Cloud Datastore:适用于此大小的结构化数据,并且具有内置的JSON API,但不进行聚合(因此我无法支持上面的“总支出”查询)
  • Google BigTable:绝对可以做这样大小的数据,可以做聚合,可以使用App Engine构建我自己的API吗?可能需要将数据转换为hbase才能导入。
  • Google BigQuery:快速聚合,需要像BigTable一样滚动我自己的API,轻松导入数据

我想知道上面是否有针对我的需求的通用解决方案。如果没有,我也非常感谢有关托管此数据和提供JSON API的最佳设置的任何建议。

更新:似乎BigQuery和Cloud SQL支持类似SQL的查询,但Cloud SQL可能不够大(请参阅注释)并且BigQuery很快就会变得昂贵,因为您需要付费查询,因此不适合公共Web应用程序。数据存储区具有良好的价值,但不进行聚合,因此我必须预先聚合并拥有多个表。

2 个答案:

答案 0 :(得分:3)

Cloud SQL可能足以满足您的需求。它当然能够处理200GB,特别是如果你使用Cloud SQL Second Generation。

他们只是为什么像MySQL这样的传统数据库(云数据库使用的数据库)可能不够,如果您的查询非常复杂且没有索引。我建议您尝试使用Cloud SQL,如果性能不够,请尝试确保您有足够的索引(提示:使用EXPLAIN statement查看查询的执行方式)。

如果您的查询无法以有用的方式编制索引,或者您的查询非常密集,以至于无论索引编制如何,它们都很慢,您可能希望升级到BigQuery。 BigQuery是并行化的,因此它可以处理与您一样多的数据,但它没有针对实时使用进行优化,也不像Cloud SQL&#34那样召集会议。 ; MySQL在一个盒子里"。

答案 1 :(得分:1)

看看ElasticSearch。它是JSON,REST,云,分布式,快速聚合查询等等。它可能是也可能不是您正在寻找的东西。