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

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

使用 Go 處理 Google 數據存儲中的架構更改?

使用 Go 處理 Google 數據存儲中的架構更改?

Go
慕姐8265434 2022-01-17 10:29:25
我向 Go 結構添加了一個新屬性,該屬性保留在數據存儲實體類型中。我嘗試使用新屬性上的過濾器加載實體:q := datastore.NewQuery("Person").Filter("Employed =", false)這僅適用于添加新屬性后創建的人員。我曾預計在添加屬性之前創建的人員會包含在過濾器中,但他們根本沒有該屬性,因此被過濾器排除在外。我想了兩種方法來處理這個問題:首先加載所有實體并在第二步中使用循環進行過濾。這增加了代碼的復雜性。批量加載并重新保存所有實體,這會添加屬性并將其設置為 false。每次添加新屬性時,我都必須記住這樣做。有沒有辦法處理這些類型的實體模式更改?
查看完整描述

1 回答

?
慕村9548890

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

如果您負擔得起,正確的方法是重新保存舊實體。

您可以使用Python map/reduce 庫來更新舊實體。

如果您想堅持使用 Go,您可以使用任務隊列查詢游標進行簡單的批處理。

在我們的 Python 應用程序中,只要可能,我們更喜歡“飛行中的熱更新”方法——新版本加載實體并檢查缺失的屬性。如果某些道具已過時,我們會將它們保留一個月或一個月,然后添加邏輯以刪除它們。這允許逐步遷移并且經常回滾而不會出現問題(發生狗屎)或至少將影響限制在一小部分記錄。此外,它更具成本效益,因為您無需支付額外的讀/寫費用。一旦我們確定我們可以運行 mapreduce。這不涉及停機時間。您可能需要或不需要停機時間 - 這實際上取決于您的更改。

使用 Go 可能會有點棘手,因為如果您嘗試加載在結構上沒有相應字段的實體,Go 會恐慌。應該有一些解決方法(我記得一些關于特殊接口或可以加載任意實體的結構),但我在 GAE 上還沒有太多實踐經驗。


查看完整回答
反對 回復 2022-01-17
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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