go - Cloud BigTable 存储同一个 rowkey 的多个副本

标签 go bigtable google-cloud-bigtable

我正在使用 Go 库写入 BigTable。我使用 ApplyBulk 方法以原子方式进行多次插入。但是,当我使用 ReadRows 函数查询 BigTable 时,我看到多个副本/版本具有相同的行键。

例如:在下面提到的示例中,我看到具有部分数据的同一个 RowKey 的多个副本,最后一个副本包含所有列和所有字段。

enter image description here

如何确保每个行键只存储一份数据副本?我怎样才能只获取最新版本的插入行?

代码:

row_range := bigtable.PrefixRange("")

err = tbl.ReadRows(ctx,row_range, func(row bigtable.Row) bool {
// logic goes here
}, bigtable.RowFilter(bigtable.LatestNFilter(1)))

最佳答案

据我所知,这是正常的。 CBT 存储该行键的历史记录,您需要通过过滤器来获取最新的。

bigtable.RowFilter(bigtable.LatestNFilter(1))

更新:这就是我使用该过滤器的方式

    rowName := "myrow#key#id" 
    row, err := bt.Table.ReadRow(ctx, rowName, bigtable.RowFilter(bigtable.LatestNFilter(1)))
    if err != nil {
        // handle error...
    }
    if row == nil {
        // check for 0 result...
    }

更新 2:

根据您的代码,改为使用 ReadRows,看起来您正在尝试获取多个行键。因此您的代码应该为每个行键提取最新的行。

如果您只想要在图像中显示的那个键,那么我会改用 ReadRow 方法。

err = tbl.ReadRow(ctx,"1564:u2Sng4xbtG", bigtable.RowFilter(bigtable.LatestNFilter(1)))

否则...我想它在 CBT 中的存储方式可能存在问题,但这有点超出我的 CBT 技能范围。希望 CBT 专家可以为您插话。

关于go - Cloud BigTable 存储同一个 rowkey 的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363210/

相关文章:

bigtable - 更长时间地维护 Google Bigtable 中的数据

windows - 在代码注释中指定 Go 构建标志 "-H=windowsgui"

java - bigtable 可以存储多少片平板电脑?

html - 将图像从 html 表单传递到 Go

mysql - 哪种数据库技术适用于大结构化数据?

bigtable - 如何在谷歌云平台之外连接谷歌bigtable

python - Bigtable CheckAndMutateRow 总是返回 False

hadoop - hbase表删除后,快照和新克隆的表会发生什么情况

Golang Mutex 锁定特定变量/映射

go - 在结构中循环结构