分散式系統中的解耦模式:領域查詢 - 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計劃任務分散式解耦模式事件
- Kafka分散式查詢引擎Kafka分散式
- SQL Server 分散式查詢SQLServer分散式
- 分散式系統中ID的需求分散式
- 為什麼我們能從行話術語中發現領域模型? - mathiasverraes模型
- Presto:Facebook的分散式SQL查詢引擎REST分散式SQL
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 分散式 - 分散式系統的特點分散式
- 分散式領域架構師要掌握的技術分散式架構
- Mysql中查詢系統時間MySql
- 19種分散式系統設計模式 - Nishant分散式設計模式
- 使用set cover演算法最佳化大型分散式系統的查詢延遲演算法分散式
- 簡單瞭解分散式系統分散式
- 分散式系統中的事務問題分散式
- 分散式資料庫查詢中 DRIVING_SITE 的疑問分散式資料庫
- 分散式系統設計中的併發訪問解決方案分散式
- 為自己搭建一個分散式 IM 系統二【從查詢演算法聊起】分散式演算法
- Citus 分散式 PostgreSQL 叢集 - SQL Reference(查詢分散式表 SQL)分散式SQL
- 區塊鏈中的分散式模式區塊鏈分散式模式
- 演算法領頭羊丨分散式系統如何選舉領導?演算法分散式
- 分散式系統的跟蹤系統分散式
- 分散式系統中的自主自治計算 - pathelland分散式
- 分散式系統中的一些問題分散式
- 分散式系統中的CAP、ACID、BASE概念分散式
- 分散式系統中 Unique ID 的生成方法分散式
- 分散式檔案系統FastDFS詳解分散式AST
- 瞭解分散式系統和Hadoop分散式Hadoop
- 分散式系統:系統模型分散式模型
- 分散式系統(三)——分散式事務分散式
- 分散式計算領域的哥德爾Eric Brewer分散式
- 上下文對映關係中如何解耦特定和通用的領域? - Nick Tune解耦
- 分散式:分散式系統下的唯一序列分散式
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- 我理解的分散式系統分散式
- 分散式系統的問題分散式