從CRUD程式設計切換到事件溯源和區塊鏈程式設計
CRUD是增刪改查的簡稱,其中增刪改都屬於一種變動操作,而新增和刪改分別屬於兩種不同型別的變動,如果以記賬來類比,新增等同於多了一筆金額,而刪改等同於減少了一筆金額。
下面以文件的增刪改查從記賬角度看看如何理解。
文件的當前狀態就是這些變動動作的累計,新增文件以後修改了這篇文件,最後又刪除了這個文件,那麼這個文件當前狀態是沒有了。而記賬如果假設期初餘額為零,存入了一筆100元,後來取出50,當再取出50時,這個賬戶當前餘額就是0了。
事件溯源EventSourcing與CRUD的區別就在於:
ES中記錄的是這三個變動,將這三個變動作為事件記錄儲存下來;而CRUD則是將這三個動作透過服務的增刪改查方法呼叫SQL的insert/update/delete語句實現。
CRUD實現方式:
事件溯源EventSourcing實現方式:
ES實際記錄的是包含Event1 Event2 Event3的集合,當需要獲得當前狀態時,透過播放這些事件獲得,比如賬戶當前餘額是:100 -50 -50=0,文件當前狀態透過遍歷事件集合:apply(event1) --> apply(event2) --->apply(event3) 計算以後的結果。
區塊鏈實際是將ES的這些事件集合複製到每個機器上,同時將這些事件嚴格透過事件編號連結起來,事件之間就無法隨意插入其他事件,保證事件鏈在分散式環境中的完整。
區塊鏈就是把Event1 <--- Event2 <--- Event3事件透過編號串聯起來,每臺機器上不但有一個完整的事件集合,而且這些事件透過編號串聯起來如同一個鏈條,當有新的事件進來,首先找出事件鏈中最後的事件編號,然後靠算力算出新的事件編號:
Event1編號Hash <--- Event2編號Hash --->Event3編號Hash
區塊鏈其實是一種分散式的事件溯源ES。
總之,基於事件驅動的事件溯源ES是一種與傳統CRUD完全不同的程式設計正規化,更是一種新的區塊鏈程式設計正規化。透過這種事件驅動程式設計方式不但可以解決傳統分散式事務的難題,而且可以提升了系統的擴充套件性和彈性。傳統的CRUD方式雖然簡單易用,但是非常依賴關聯式資料庫技術,相信隨著區塊鏈技術的發展,傳統CRUD程式設計將慢慢會淘汰,變成培訓課堂上的練習入門技術。
下面以文件的增刪改查從記賬角度看看如何理解。
文件 記賬 新增文件 +100 修改文件 -50 刪除文件 -50 <p class="indent"> |
文件的當前狀態就是這些變動動作的累計,新增文件以後修改了這篇文件,最後又刪除了這個文件,那麼這個文件當前狀態是沒有了。而記賬如果假設期初餘額為零,存入了一筆100元,後來取出50,當再取出50時,這個賬戶當前餘額就是0了。
事件溯源EventSourcing與CRUD的區別就在於:
ES中記錄的是這三個變動,將這三個變動作為事件記錄儲存下來;而CRUD則是將這三個動作透過服務的增刪改查方法呼叫SQL的insert/update/delete語句實現。
CRUD實現方式:
文件 記賬 SQL實現 新增文件 +100 insert/update 修改文件 -50 update 刪除文件 -50 delete/update <p class="indent"> |
事件溯源EventSourcing實現方式:
文件 記賬 ES實現 新增文件 +100 Event1 修改文件 -50 Event2 刪除文件 -50 Event3 <p class="indent"> |
ES實際記錄的是包含Event1 Event2 Event3的集合,當需要獲得當前狀態時,透過播放這些事件獲得,比如賬戶當前餘額是:100 -50 -50=0,文件當前狀態透過遍歷事件集合:apply(event1) --> apply(event2) --->apply(event3) 計算以後的結果。
區塊鏈實際是將ES的這些事件集合複製到每個機器上,同時將這些事件嚴格透過事件編號連結起來,事件之間就無法隨意插入其他事件,保證事件鏈在分散式環境中的完整。
區塊鏈就是把Event1 <--- Event2 <--- Event3事件透過編號串聯起來,每臺機器上不但有一個完整的事件集合,而且這些事件透過編號串聯起來如同一個鏈條,當有新的事件進來,首先找出事件鏈中最後的事件編號,然後靠算力算出新的事件編號:
Event1編號Hash <--- Event2編號Hash --->Event3編號Hash
區塊鏈其實是一種分散式的事件溯源ES。
總之,基於事件驅動的事件溯源ES是一種與傳統CRUD完全不同的程式設計正規化,更是一種新的區塊鏈程式設計正規化。透過這種事件驅動程式設計方式不但可以解決傳統分散式事務的難題,而且可以提升了系統的擴充套件性和彈性。傳統的CRUD方式雖然簡單易用,但是非常依賴關聯式資料庫技術,相信隨著區塊鏈技術的發展,傳統CRUD程式設計將慢慢會淘汰,變成培訓課堂上的練習入門技術。
相關文章
- 區塊鏈程式設計(二)區塊鏈程式設計
- Java的CQRS和事件溯源ES入門:如何從CRUD切換到CQRS/ES - BaeldungJava事件
- 區塊鏈程式設計go(四)-交易區塊鏈程式設計Go
- 從程式設計到養生程式設計程式設計
- 拯救祭天的程式設計師——事件溯源模式程式設計師事件模式
- 區塊鏈上程式設計:DApp 開發簡介區塊鏈程式設計APP
- 區塊鏈架構設計區塊鏈架構
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- 你可以 CRUD,但你不是 CRUD 程式設計師!程式設計師
- 阻塞式程式設計和非阻塞式程式設計區別程式設計
- 從2012到2021,從土木到程式設計師程式設計師
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 區塊鏈: 暴富的捷徑與程式設計師的舞臺區塊鏈程式設計師
- 【區塊鏈】實戰·以太坊智慧合約程式設計引導區塊鏈程式設計
- 從碼農到設計者,從單例模式入手設計程式碼單例模式
- 從程式設計小白到全棧開發:瞭解事件機制程式設計全棧事件
- 揚帆起航:從指令式程式設計到函式響應式程式設計程式設計函式
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- 程式設計師如何切入區塊鏈去中心化應用開發程式設計師區塊鏈中心化
- 第十六課 不用程式設計,如何把長文章記錄到以太坊區塊鏈上?程式設計區塊鏈
- 從執行緒到併發程式設計執行緒程式設計
- 《Python程式設計:從入門到實踐》Python程式設計
- Android Camera 程式設計從入門到精通Android程式設計
- 從Delphi到Lazarus——我的程式設計之路程式設計
- 程式設計和網路程式設計入門程式設計
- 《Java 物聯網、人工智慧 和區塊鏈程式設計實戰》之“Java 簡介”Java人工智慧區塊鏈程式設計
- 區塊鏈溯源解決方案_區塊鏈溯源應用場景區塊鏈
- 區塊鏈溯源技術,區塊鏈溯源防偽解決方案區塊鏈
- 區塊鏈溯源可信嗎?區塊鏈溯源系統解決方案區塊鏈
- 從 CRUD 遷移到事件溯源的祕訣 - eventstore事件
- 非同步程式設計:基於事件的非同步程式設計模式(EAP)非同步程式設計事件設計模式
- 闢謠!程式設計師和產品FIGHTING事件程式設計師事件
- 傳統溯源與區塊鏈溯源有何不同,區塊鏈溯源技術發展區塊鏈
- 我從程式設計面試中學到的程式設計面試
- Python 程式設計從入門到實踐5Python程式設計
- 區塊鏈商品溯源系統開發方案,區塊鏈公共服務平臺建設區塊鏈
- 物件導向程式設計和`GP`泛型程式設計物件程式設計泛型