分散式系統中的解耦模式:領域查詢 - mathiasverraes
使用領域查詢替換普通自由查詢可以將業務知識從伺服器內部分離出來。
問題
查詢通常與資料庫查詢相關聯。然而,我們可以通過其他方式查詢不是資料庫的系統,比如查詢REST和GraphQL等API。自由查詢這個術語是指使用豐富的查詢語言,可以非常自由地訪問和組合來自這些系統的資料。
在由單個團隊擁有的單個客戶端和伺服器的非常簡單的環境中,這不是一個大問題,因為可以同時針對伺服器和客戶端進行修改。
但是在更復雜的環境中,幾個客戶端卻並不在伺服器團隊的控制之下,比如一個公共API。我們不知道他們將向我們傳送什麼查詢,因此保證API向後相容性的唯一方法是保持模式不變。當然,我們可以記錄查詢,但這並不能保證在客戶端中隱藏有尚未傳送的查詢。
比如客戶端傳送以下自由查詢:
SELECT * FROM Cars AS c INNER JOIN LeasingContracts AS lc ON c.CarId = lc.CarId WHERE c.RegistrationYear = 2014; |
僅從SQL查詢中無法搞清楚其目的是什麼?據推測,客戶端並非使用這兩個表中的所有欄位,如果為這個客戶端專門建立一個資料表結構,提供其所需的欄位,這樣可能會有表結構的破壞性風險。
解決
經過進一步調查得知客戶其實想要知道哪些車輛需要更換?並使用一些LeasingContracts欄位來計算狀態。
因此,針對這種情況,更好的設計是關閉對資料庫欄位的所有訪問,並使用自然語言提供領域查詢。伺服器獲取並計算結果,響應訊息僅包含客戶端實際需要的資料。
WhichCarsAreUpForReplacement : Query { registrationYear: 2014 } CarsThatAreUpForReplacement : Response { cars: [CarId] } |
相關文章
- 分散式系統中的解耦模式:概要事件 - mathiasverraes分散式解耦模式事件
- 分散式系統中的解耦模式:隔離事件層 - mathiasverraes分散式解耦模式事件
- 分散式系統中的領導選舉分散式
- 分散式系統解耦模式:用事件代表時間觸發Cron計劃任務分散式解耦模式事件
- 32_分散式文件系統_document查詢內部原理圖解揭秘分散式圖解
- 分散式系統2:分散式系統中的時鐘分散式
- Kafka分散式查詢引擎Kafka分散式
- 分散式系統中ID的需求分散式
- 分散式 - 分散式系統的特點分散式
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 19種分散式系統設計模式 - Nishant分散式設計模式
- 為什麼我們能從行話術語中發現領域模型? - mathiasverraes模型
- 為自己搭建一個分散式 IM 系統二【從查詢演算法聊起】分散式演算法
- Citus 分散式 PostgreSQL 叢集 - SQL Reference(查詢分散式表 SQL)分散式SQL
- 分散式系統中的事務問題分散式
- 分散式系統中的CAP、ACID、BASE概念分散式
- 分散式系統設計中的併發訪問解決方案分散式
- 分散式系統的跟蹤系統分散式
- 分散式系統分散式
- OceanBase 4.0 解讀:分散式查詢效能提升,我們是如何思考的?分散式
- 分散式系統:系統模型分散式模型
- 演算法領頭羊丨分散式系統如何選舉領導?演算法分散式
- 分散式系統中的一些問題分散式
- 分散式系統中的自主自治計算 - pathelland分散式
- 分散式系統(三)——分散式事務分散式
- 分散式:分散式系統下的唯一序列分散式
- 分散式查詢優化SERIAL_FROM_REMOTE分散式優化REM
- 分散式系統的問題分散式
- 我理解的分散式系統分散式
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- [分散式]分散式計算系統淺析分散式
- 什麼是分散式系統!以及分散式系統架構的優缺點!分散式架構
- 秒級查詢之開源分散式SQL查詢引擎Presto實操-上分散式SQLREST
- 理解分散式系統中的快取架構(下)分散式快取架構
- 理解分散式系統中的快取架構(上)分散式快取架構
- 一條SQL在 MaxCompute 分散式系統中的旅程SQL分散式
- 什麼是分散式系統中的冪等性分散式
- 分散式系統中,級聯故障是最可怕的分散式