從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
- Android 程式設計下設定 Activity 切換動畫Android程式設計動畫
- 你可以 CRUD,但你不是 CRUD 程式設計師!程式設計師
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- 從學生到程式設計師(一) 關於程式設計 (轉)程式設計師
- 從程式設計師到CEO(轉)程式設計師
- Framer 指南:從設計到程式設計、元件及其它程式設計元件
- 阻塞式程式設計和非阻塞式程式設計區別程式設計
- 【區塊鏈】實戰·以太坊智慧合約程式設計引導區塊鏈程式設計
- 區塊鏈: 暴富的捷徑與程式設計師的舞臺區塊鏈程式設計師
- 區塊鏈溯源解決方案_區塊鏈溯源應用場景區塊鏈
- 區塊鏈溯源可信嗎?區塊鏈溯源系統解決方案區塊鏈
- 區塊鏈溯源技術,區塊鏈溯源防偽解決方案區塊鏈
- 從碼農到設計者,從單例模式入手設計程式碼單例模式
- 程式設計師:從打工到創業?程式設計師創業
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- 從程式設計小白到全棧開發:瞭解事件機制程式設計全棧事件
- 傳統溯源與區塊鏈溯源有何不同,區塊鏈溯源技術發展區塊鏈
- 從 CRUD 遷移到事件溯源的祕訣 - eventstore事件
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 事件與介面程式設計事件程式設計
- 事件驅動程式設計事件程式設計
- 程式設計師如何切入區塊鏈去中心化應用開發程式設計師區塊鏈中心化
- 揚帆起航:從指令式程式設計到函式響應式程式設計程式設計函式
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- 卓越程式設計師和優秀程式設計師有哪些區別?程式設計師
- 低階程式設計師和高階程式設計師的區別程式設計師
- 第十六課 不用程式設計,如何把長文章記錄到以太坊區塊鏈上?程式設計區塊鏈
- 區塊鏈商品溯源系統開發方案,區塊鏈公共服務平臺建設區塊鏈
- 區塊鏈溯源技術是什麼?區塊鏈溯源技術開發區塊鏈
- 區塊鏈溯源落地應用,區塊鏈在商品溯源中的應用區塊鏈
- 從執行緒到併發程式設計執行緒程式設計