事件溯源投影模式:重複資料刪除策略 - domaincentric
在典型的CQRS / ES系統中,由投射處理的事件具有至少一次交付保證。因此,通常需要實施重複資料刪除以實現(感知)冪等性。
1. 基於事件ID
每個投射對應一個重複資料刪除表
在單獨的表中儲存已處理的事件ID,並以事務方式讀取當前餘額,並僅在表中不存在事件ID時更新它。
CREATE TABLE handled_events (projection_id TEXT, event_id TEXT, UNIQUE(projection_id(36), event_id(36))); |
每個投射的每個流的重複資料刪除表:可以使用表來儲存每個流的事件ID(而不是整個投射)。這將使查詢和索引更有效:
CREATE TABLE handled_events (projection_id TEXT, stream_id TEXT, event_id TEXT, UNIQUE(projection_id(36), stream_id(36), event_id(36))); |
2. 基於全域性序列號
第二種方法依賴於一些事件儲存為寫入其中的所有事件提供全域性排序的事實。如果您的事件儲存確實為您提供了這樣的序列號,那麼它可以更好地替代使用顯式事件ID。鑑於我們可以保證事件處理程式中的有序處理並且序列號嚴格增加,那麼只有當儲存的序列號小於事件接收的數量時,我們才會處理事件。
3. 基於流版本號
上一節中描述的解決方案依賴於事件儲存將提供全域性排序的事實。在大多數情況下,這應該不是問題,但有時選擇db後端或縮放可能會迫使您放棄此約束。
如果使用基於stream_version的樂觀鎖實現事件儲存,我們可以使用stream_version作為使用全域性序列號的替代方法。
具體點選原文檢視詳細。
相關文章
- 刪除重複資料
- mongodb刪除重複資料MongoDB
- sqlserver中刪除重複資料SQLServer
- 事件溯源:投影或投射模式 -Kacper Gunia事件模式
- 解析postgresql 刪除重複資料案例SQL
- PostgreSQL刪除表中重複資料SQL
- mysql 刪除表中重複的資料MySql
- MS SQL Server 刪除重複行資料SQLServer
- excel刪除重複資料保留一條 如何刪掉重複資料只留一條Excel
- ORACLE批量刪除無主鍵重複資料Oracle
- Oracle中刪除表中的重複資料Oracle
- 使用Java Stream API中DistinctBy刪除重複資料JavaAPI
- mysql 刪除重複項MySql
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- 【常用方法推薦】如何刪除MySQL的重複資料?MySql
- oracle刪除重資料方法Oracle
- VSCode刪除重複的空行VSCode
- JavaScript 刪除字串重複字元JavaScript字串字元
- JavaScript陣列刪除重複元素JavaScript陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- 刪除重複id的記錄
- JavaScript刪除字串中重複字元JavaScript字串字元
- JavaScript陣列刪除重複內容JavaScript陣列
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- 使用事件溯源、Kafka和OGG從Oracle內部複製資料事件KafkaOracle
- MariaDB刪除重複記錄效能測試
- 刪除排序陣列中的重複項排序陣列
- Laravel 中利用『模型事件』來實現刪除資料時的連帶刪除Laravel模型事件
- 從增刪改查到事件溯源 - PHP事件PHP
- redis 資料刪除策略和逐出演算法Redis演算法
- 刪除事件(解綁事件)/ 刪除事件相容性解決方案事件
- C# 批次刪除Excel中的重複行C#Excel
- ES6刪除字串中重複的元素字串
- 刪除有序陣列中的重複項 II陣列
- 刪除字串中的所有相鄰重複項字串
- sql刪除重複記錄只保留一條SQL