首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bigquery流插入需要时间

Bigquery流插入需要时间
EN

Stack Overflow用户
提问于 2014-11-19 12:44:05
回答 1查看 348关注 0票数 0

在我们模块的负载测试过程中,我们发现bigquery插入调用需要花费3-4秒的时间。我不确定这是不是可以。我们使用java biguqery客户端库,平均每个api调用推送500条记录。我们期望每秒有一百万条记录传输到我们的模块,因此bigquery插入是处理这种流量的瓶颈。目前推送数据需要几个小时。如果我们需要更多关于代码或场景的信息,请让我知道。

感谢Pankaj

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 15:46:16

由于流媒体有一个有限的有效载荷大小,请参见Quota policy它更容易谈论时间,因为有效载荷对我们两个人都是有限的,但我也会提到其他的副作用。

我们为每个流请求测量1200-2500毫秒,这在上个月是一致的,如您在图表中所见。

虽然我们看到了几个副作用:

  • 请求随机失败,类型为'Backend error‘
  • 请求随机失败,类型为'Connection error’
  • 请求随机失败,类型为'timeout‘(注意,此处只有一些行失败,而不是整个有效负载)
  • 其他一些错误消息是非描述性的,它们非常模糊,对您没有帮助,请重试。
  • 我们每天都会看到数百个这样的失败,所以它们几乎是常态,与云运行状况无关。

对于所有这些,我们在付费谷歌企业支持中打开了案例,但不幸的是,他们没有解决这个问题。看来,对于这些问题,推荐的选项是指数回退和重试,即使是被告知要这样做的支持也是如此。对我个人来说这并不让我开心。

您选择的方法需要几个小时,这意味着it does not scale,并且不能扩展。您需要重新考虑使用async processes的方法。为了更快地完成,你需要并行运行多个工作进程,流性能将是相同的。只要有10个工作人员并行,这意味着时间将减少10倍。

在后台处理IO受限或cpu受限的任务现在是大多数web应用程序中的一种常见做法。有很多软件可以帮助构建后台作业,其中一些是基于像Beanstalkd这样的消息系统。

基本上,您需要在封闭的网络中分发插入作业,确定它们的优先级,并使用(运行)它们。这正是Beanstalkd提供的功能。

Beanstalkd提供了在管中组织作业的可能性,每个管对应于一种作业类型。

您需要一个API/producer,它可以将作业放在管道上,比如说行的json表示。对于我们的用例来说,这是一个杀手级的特性。因此,我们有一个API来获取行,并将它们放在tube上,这只需要几毫秒,所以您可以实现快速响应时间。

另一方面,你现在在一些管道上有一堆工作。你需要一个经纪人。代理/消费者可以保留一个工作。

它还可以帮助您进行作业管理和重试:当作业成功处理时,使用者可以从管中删除该作业。在失败的情况下,消费者可以隐藏工作。这项工作将不会被推回管子,但将可用于进一步检查。

消费者可以释放一个作业,Beanstalkd将把这个作业推回到管道中,并使其可供另一个客户端使用。

Beanstalkd客户端可以在大多数常见语言中找到,web interface对于调试很有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27009118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档