使用Golang减少Bigtable的访问时间

时间:2016-07-22 10:21:04

标签: go bigtable

我想在Golang RestApi上减少对表格的访问时间。

我有一个带有enpoint的Go restAPI,它需要访问请求体中指定的每个代码的bigtable数据库。我的密钥访问设计是 “provider | client | productCode | date | ..” (以及其他4个参数)。

对于请求正文的每个productCode,我正在进行异步调用以读取具有指定键的行。
在我的测试中,我要求1000个产品代码,在我的本地机器上获得的时间大约是800~900ms。云计算机上的时间大约为550~450毫秒。

我正在使用bigtable package访问bigTable,我正在使用以下代码:

uselessOutput

我也尝试了this示例,时间并不好:

我使用的是gorutines和chanels的纠正吗? 我访问BT的方式是正确的吗? 也许关键设计不正确?

1 个答案:

答案 0 :(得分:3)

我认为问题在于您使用的是1维chan

resp := make(chan string) 

您应该尝试通过以下方式扩大其维度:

resp := make(chan string,len(listPKs))

这是因为如果您的异步函数在读取chan中的信息之前完成,则chan将阻止。

附注:在不执行任何检查的情况下产生例程可能是问题的可能来源。

我建议您实施working queue以优化您的任务。