[英]What is the best way to handle database alteration in a No-SQL DB like Hive for Flutter?
假設您使用Hive啟動具有以下 DB 模式的應用程序:
box.put('schema', {'foo': true, 'bar' : 2, 'baz': 'baz'});
在您啟動新版本的應用程序並假設架構更改名稱后的一段時間,如下所示:
box.put('schema', {'f00': true, 'b@r' : 2, 'baz': 'baz'});
對客戶現有的數據庫采取什么最佳方法?
無論 Flutter 上下文如何,這似乎都是一般的 No-SQL 數據庫使用。
使用 No-SQL 數據庫意味着他們不傾向於使用遷移協議,因為它的重點是以極快的速度和效率進行讀寫。
大多數時候,在處理 No-SQL 數據庫時,數據的整個結構都存在於代碼中,而不是數據庫中。 這與 SQL 數據庫完全相反。
Hive有一種方法來處理類https://docs.hivedb.dev/#/custom-objects/generate_adapter?id=updating-a-class中的這種更改,即使這樣請記住,文檔說如果您更改字段編號你將失去你的結構。
不管 Flutter 是什么,您都需要記住,在使用 No-SQL 數據庫時,無論編碼語言如何,為了 go :
box.put('schema', {'foo': true, 'bar': 2, 'baz': 'baz'});
對此:
box.put('schema', {'f00': true, 'b@r': 2, 'baz': 'baz'});
並且仍然支持兩者。 您將需要無限期地編寫同時支持這兩個條目的代碼,而且每次您閱讀舊格式時,您都必須決定是否保留它並支持兩者或將舊格式更改為新格式。
另請注意,從舊格式到新格式的更改應該在使用時讀取它們。
因為要一次更改所有條目,您將不得不讀取和重寫數據庫中的所有條目,這太低效了。
由於在 No-SQL 中,每個單獨的條目(文件、文檔、.json)沒有嚴格的格式,這意味着它們可以存儲任何你認為合適的東西,即使它們屬於同一個存儲/表。 在這種類型的數據庫中不存在像在 SQL 中那樣更改表中的列名之類的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.