亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Cloud BigTable 存儲同一行鍵的多個副本

Cloud BigTable 存儲同一行鍵的多個副本

Go
達令說 2023-07-10 15:00:10
我正在使用 Go 庫寫入 BigTable。我使用該ApplyBulk方法以原子方式進行多次插入。但是,當我使用該函數查詢 BigTable 時,ReadRows我看到具有相同行鍵的多個副本/版本。例如:在下面提到的示例中,我看到同一 RowKey 的多個副本包含部分數據,最后一次出現的副本包含包含所有字段的所有列。如何確保每個行鍵只存儲一個數據副本?如何僅獲取插入的行的最新版本?代碼:row_range := bigtable.PrefixRange("")err = tbl.ReadRows(ctx,row_range, func(row bigtable.Row) bool {// logic goes here}, bigtable.RowFilter(bigtable.LatestNFilter(1)))
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

據我所知,這是正常的。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 專家能為您提供幫助。


查看完整回答
反對 回復 2023-07-10
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這里似乎有點混亂:

  1. 在任何情況下,ReadRows 都不應該返回重復的行鍵。假設電子表格中的行對應于客戶端庫在 func 回調中返回的行,那么這是客戶端庫中的錯誤。

  2. Bigtable 確實允許單元格值的多個版本。它提供像LatestNFilter()這樣的過濾器來隱藏舊的單元格值,并提供gc規則來定期刪除它們。但是,這僅限于單元格值,與行鍵無關。換句話說,Bigtable 提供單元版本而不是行版本。

  3. ApplyBulk 不是原子的,而且它不提供有關突變排序的任何保證。


查看完整回答
反對 回復 2023-07-10
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

我認為錯誤來自ApplyBulk 轉換“插入任務”的方式。


查看完整回答
反對 回復 2023-07-10
  • 3 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號