我想我在某處犯了一個愚蠢的錯誤,但已經很長時間想不出來:( 代碼很粗糙,我只是在測試東西。它會刪除,但由于某些原因不是所有文件,我已經重寫以將其全部刪除一個,那沒問題。我使用 Couchbase 的官方包 http://github.com/couchbase/gocb 這里是代碼:var items []gocb.BulkOpmyQuery := gocb.NewN1qlQuery([Selecting ~ 283k documents from 1.5mln])rows, err := myBucket.ExecuteN1qlQuery(myQuery, nil)checkErr(err)var idToDelete map[string]interface{}for rows.Next(&idToDelete) { items = append(items, &gocb.RemoveOp{Key: idToDelete["id"].(string)})}if err := rows.Close(); err != nil { fmt.Println(err.Error())}if err := myBucket.Do(items);err != nil { fmt.Println(err.Error())}這樣它刪除了大約 70k 個文件,我再次運行它它又刪除了 43k 個文件。然后我就讓它一一刪除,效果很好://var items []gocb.BulkOpmyQuery := gocb.NewN1qlQuery([Selecting ~ 180k documents from ~1.3mln])rows, err := myBucket.ExecuteN1qlQuery(myQuery, nil)checkErr(err)var idToDelete map[string]interface{}for rows.Next(&idToDelete) { //items = append(items, &gocb.RemoveOp{Key: idToDelete["id"].(string)}) _, err := myBucket.Remove(idToDelete["id"].(string), 0) checkErr(err)}if err := rows.Close(); err != nil { fmt.Println(err.Error())}//err = myBucket.Do(items)
1 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
默認情況下,針對 N1QL 的查詢使用稱為“請求加”的一致性級別。因此,您第二次運行程序進行查詢將使用查詢時有效的任何索引更新,而不是通過等待索引更新來考慮您之前的所有更改。您可以在Couchbase 的開發人員指南中閱讀有關此內容的更多信息,看起來您希望通過查詢上的一致性方法將RequestPlus
參數添加到 myquery 中。
這種最終一致的二級索引和靈活性非常強大,因為它使您作為開發人員能夠決定要支付的一致性級別,因為索引重新計算是有成本的。
- 1 回答
- 0 關注
- 199 瀏覽
添加回答
舉報
0/150
提交
取消