如何使用bigtable Go客户端支持分页?

时间:2018-12-18 01:59:03

标签: go pagination google-cloud-platform google-cloud-bigtable

我将时间序列数据存储在具有userId#timestamp的rowKey的bigtable中。给定(userId,startTime,endTime)的查询参数,我如何支持分页,即从'offset'开始返回'limit'记录?

请注意,在大表中可能不存在userId#startTime rowKey,但在startTime / EndTime之前和之后会有一些数据点。 Bigtable Go客户端似乎支持带prefixRange参数的ReadRows。当我使用ReadRows进行迭代时,我可以使用userId的prefixRange和'seek'到startTime,但是如果starTime / endTime过去,这似乎效率很低。有更好的办法吗?

1 个答案:

答案 0 :(得分:5)

您可以使用ReadRowsuserId#startTimeuserId#endTime进行NewRange操作,并设置读取LimitRows返回的行数的限制选项。

err = tbl.ReadRows(ctx, NewRange("<userId>#<startTime>", "<userId>#<endTime>"), func(r Row) bool {
    fmt.Println("Got a row")
    return true
}, LimitRows(100))