數(shù)據(jù)集靜態(tài)水平分類
在設(shè)計(jì)應(yīng)用程序時(shí),一個(gè)常見的挑戰(zhàn)是根據(jù)數(shù)據(jù)變化的頻率來確定最合適的實(shí)現(xiàn)方式。是否應(yīng)該將狀態(tài)存儲(chǔ)在表格中以便擴(kuò)展工作流?是否應(yīng)該將國家名單列表存儲(chǔ)在表格中,以便擴(kuò)展工作流?是嵌入代碼中還是存儲(chǔ)在表格中?是否應(yīng)該根據(jù)目標(biāo)平臺(tái)調(diào)整線程池大小?
在當(dāng)前的大型項(xiàng)目中,我們根據(jù)數(shù)據(jù)集的靜態(tài)程度對(duì)其進(jìn)行分類,從非常靜態(tài)到較不穩(wěn)定不等。
第1級(jí):非常靜態(tài)的數(shù)據(jù)集
這些類型的數(shù)據(jù)更改總是涉及業(yè)務(wù)規(guī)則并影響代碼。一個(gè)典型的例子是工作流中的狀態(tài)列表(已開始、進(jìn)行中、等待、完成等)。這種數(shù)據(jù)集的指示性大小通常在 2 到 20 個(gè)條目之間。
從技術(shù)角度來看,它通常以枚舉的形式實(shí)現(xiàn)(例如 PostgreSQL 中的枚舉類型、Java 中的枚舉或 TypeScript 中的枚舉)。另外,它也可以作為常量或常量列表來管理。
您可以使用以下試金石:代碼中的“IF”語句是否需要包含此列表中的任何項(xiàng)目?
更改這類數(shù)據(jù)需要發(fā)布新版本或更改數(shù)據(jù)定義語言(DDL),而且不易管理。
第2級(jí):很少更改的數(shù)據(jù)
可以把數(shù)據(jù)集想象成國家/州列表或貨幣列表。這些數(shù)據(jù)集很少超過幾十個(gè)條目。我們將其稱為 "術(shù)語"。
從技術(shù)角度看,可以使用配置文件(JSON/YAML/CSV/屬性等)或數(shù)據(jù)庫(使用 PostgreSQL 等關(guān)系數(shù)據(jù)庫的表,使用 MongoDB 等 NoSQL 文檔數(shù)據(jù)庫的文檔或文檔列表等)來管理它們。
如果預(yù)算允許,提供一個(gè)可以添加、更改或刪除此類條目的管理圖形的用戶界面通常是個(gè)好主意。
即使以后數(shù)據(jù)可能會(huì)發(fā)生變化,啟動(dòng)應(yīng)用程序時(shí)通常也需要這些列表。因此,建議在首次使用應(yīng)用程序之前將其與最小數(shù)據(jù)集打包在一起。例如,Liquibase 配置可以與應(yīng)用程序一起發(fā)布,以便在數(shù)據(jù)庫中創(chuàng)建最小的國家集(如果還不存在的話)。不過,要謹(jǐn)慎使用 "CREATE IF NOT EXIST "方案,以避免與已有數(shù)據(jù)發(fā)生沖突。
根據(jù)所使用的打包和技術(shù),這類數(shù)據(jù)的更改可能需要也可能不需要新版本。如果您的應(yīng)用程序包含嵌入最小數(shù)據(jù)集的機(jī)制(如配置文件或自動(dòng)執(zhí)行的 Liquibase 或 SQL 腳本),則可能需要發(fā)布新版本。雖然這最初可能會(huì)被視為一種限制,但它能確保您的應(yīng)用程序自成一體,并且從部署開始就始終處于運(yùn)行狀態(tài),這通常是值得的。
在數(shù)據(jù)庫中存儲(chǔ)術(shù)語時(shí),常見的策略是為每個(gè)術(shù)語創(chuàng)建一個(gè)表(如貨幣表、國家表)。如果像我們一樣,您的應(yīng)用程序需要更靈活的方法,您可以為每個(gè)微服務(wù)使用單個(gè) NOMENCLATURE 表,并使用簡單的列(如 NOMENCLATURE 名稱)來區(qū)分術(shù)語。然后,所有術(shù)語都會(huì)合并到一個(gè)技術(shù)表中,使用術(shù)語名稱上的 WHERE 子句就可以直接檢索特定術(shù)語。如果要保持排序,可以為每個(gè)術(shù)語條目分配一個(gè)序號(hào)值,從而進(jìn)一步改進(jìn)這種方法。
第3級(jí):不穩(wěn)定數(shù)據(jù)
大多數(shù)應(yīng)用程序都會(huì)持久保存大量數(shù)據(jù),我們稱之為 "易失性數(shù)據(jù)"。這類數(shù)據(jù)可能涉及由應(yīng)用程序管理數(shù)量不限的記錄,如用戶配置文件、地址或聊天討論。
這類數(shù)據(jù)集中記錄的更改、添加或刪除永遠(yuǎn)不需要發(fā)布新版本(盡管備份仍然是必要的)。代碼的設(shè)計(jì)通常是以通用的方式而不是以個(gè)案的方式來處理此類變更。
這類數(shù)據(jù)通常無法通過修改代碼進(jìn)行管理,而是通過常規(guī)的前臺(tái)/后臺(tái)圖形用戶界面或批處理程序進(jìn)行管理。
總結(jié)
選擇適當(dāng)?shù)撵o態(tài)級(jí)別對(duì)于確保應(yīng)用程序的可維護(hù)性和可修改性至關(guān)重要,并有助于避免潛在的隱患。使用不正確的解決方案來處理特定的靜態(tài)級(jí)別,可能會(huì)導(dǎo)致不必要的集成和發(fā)布任務(wù),或降低應(yīng)用程序的可維護(hù)性。
相關(guān)資訊
- 區(qū)塊鏈技術(shù)與物聯(lián)網(wǎng)結(jié)合的好處
- 人工智能模型可減少網(wǎng)絡(luò)停機(jī)時(shí)間
- 物聯(lián)網(wǎng)如何推動(dòng)未來的冷鏈物流
- 探討5G對(duì)物聯(lián)網(wǎng)的影響
- 應(yīng)對(duì)SaaS蔓延帶來的安全挑戰(zhàn)
- 阿里云全面降價(jià),釋放了什么信號(hào)?
- 快手雙邊市場(chǎng)的復(fù)雜實(shí)驗(yàn)設(shè)計(jì)問題
- 如何利用5G實(shí)現(xiàn)大規(guī)模機(jī)器類型通
- 自動(dòng)化庫存管理軟件可最大限度地
- 6種頂級(jí)AI工具可增強(qiáng)數(shù)字營銷中