專注資料才能發現邏輯
英文有句話:Focus on the data, not on the logic. The logic will emerge when you understand the data( 專注於資料,而不是邏輯。當你理解了資料,邏輯將出現)。 從這裡看出資料和邏輯的顯隱關係,這大概也是50年的資料庫系統構建 版本控制系統和物件導向語言能夠告訴我們的。
隨著Docker與DevOps的興起,開發人員與運維人員正在融合,而業務日誌應該是研發人員與運維人員的橋樑,也是每個研發人員必須掌握的資料抽象。來自LinkedIn的Kreps釋出了其具有程式設計師史詩般的博文:日誌是每個軟體工程師關心的統一資料抽象
Kreps首先指出日誌以前都是用來記錄資料庫交易的記錄,以防止出現錯誤或應用崩潰後,能夠撤銷之前的更改操作,或者在磁碟等媒介出問題後重新執行這種更改操作,以及用來做簡單的審計和附加資訊的修訂。
他很有見地提出分散式狀態機對於分散式系統設計的重要性:
“你可以把用多臺機器一起執行同一件事情縮減為為這些程式輸入分散式一致性的日誌資料。這裡使用日誌的目的是把所有非確定性的東西排除在輸入流之外,這樣來確保每個複製都能夠同步地處理輸入。”
其中將非確定性排除出輸入流之外非常亮眼。因為這點非常容易被忽視。
Kreps在考量了各種各樣的歷史資訊系統的使用,提出如下觀點:
“這可能會引起你對原始碼版本管理的聯想。原始碼管理和資料庫之間有密切關係。版本管理解決了一個大家非常熟悉的問題,那也是分散式資料系統需要解決的--- 時時刻刻在變化著的分散式管理。版本管理系統通常以補丁的釋出為基礎,這實際上可能是一個日誌。您可以直接對當前原始碼 類似於表一樣做出一份"快照"。你會注意到, 與其他分散式狀態化系統類似,版本控制系統在 當你更新原始碼時會複製到日誌,當你提交新程式碼時,你只是將更新應用到你的當前快照中而已。 ”
這個觀點實際指出關於系統的歷史業務資料非常有價值的,我們只能在資料庫中獲得某個當前的狀態,而無法知道是透過如何操作得到當前的狀態。而業務日誌則儲存了系統的歷史運算元據。
一個日誌處理系統和版本控制系統之間是有差異的,日誌處理系統只記錄一個時間表,在版本控制系統允許您有多個行歷史。版本控制系統提供基本分支和合並功能,這使得它們比資料庫系統更復雜和更強大。
Kreps提出了資料表與事件是一對情侶,它們相互印證:
“這些日誌有點類似借貸清單和銀行的流程,資料庫表記錄的是當前的盈餘表。如果你有大量的操作日誌,你就可以使用這些操作從而建立可以捕獲當前狀態的表”
這個觀點和我們在領域事件/CQRS架構倡導的狀態和事件分離是一致的,從某種程度上將,我們使用EventSourcing來記錄領域事件然後播放,也是為了獲得系統某個時刻的狀態快照,這種原理與資料庫內部的日誌作用是同樣的,因此,可以看出我們使用DDD + CQRS + EventSourcing實際是將開啟資料庫這個盒子,直接用物件導向程式語言實現一個基於記憶體資料庫系統而已。
更重要的是,Kreps提出三種日誌的用途。
1.資料整合—能讓一個公司的所有資料容易整合儲存和處理。
2.實時流資料處理—以資料流方式計算
3.分散式系統設計—以日誌為中心的設計能簡化實踐中的分散式系統。
具有幾十年從業經驗的人說:我是從資料庫系統開始我的職業,我一直致力於傳統的日誌恢復工作中,還有設計實現類似的系統,然後將我的職業的三分子時間花在分散式系統上,花費了我大量時間在服務的複製上,使用非同步的日誌以確保資料的一致性。這意味著我過去三十年都是在和日誌打交道。
如果你是一個軟體工程師,你會在你的公司中聽到開發人員談論日誌、複製、日誌傳送等類似的話題,如果你想了解更多,你應該花一些更多時間閱讀Kreps這篇程式設計師史詩般的文章:
隨著Docker與DevOps的興起,開發人員與運維人員正在融合,而業務日誌應該是研發人員與運維人員的橋樑,也是每個研發人員必須掌握的資料抽象。來自LinkedIn的Kreps釋出了其具有程式設計師史詩般的博文:日誌是每個軟體工程師關心的統一資料抽象
Kreps首先指出日誌以前都是用來記錄資料庫交易的記錄,以防止出現錯誤或應用崩潰後,能夠撤銷之前的更改操作,或者在磁碟等媒介出問題後重新執行這種更改操作,以及用來做簡單的審計和附加資訊的修訂。
他很有見地提出分散式狀態機對於分散式系統設計的重要性:
“你可以把用多臺機器一起執行同一件事情縮減為為這些程式輸入分散式一致性的日誌資料。這裡使用日誌的目的是把所有非確定性的東西排除在輸入流之外,這樣來確保每個複製都能夠同步地處理輸入。”
其中將非確定性排除出輸入流之外非常亮眼。因為這點非常容易被忽視。
Kreps在考量了各種各樣的歷史資訊系統的使用,提出如下觀點:
“這可能會引起你對原始碼版本管理的聯想。原始碼管理和資料庫之間有密切關係。版本管理解決了一個大家非常熟悉的問題,那也是分散式資料系統需要解決的--- 時時刻刻在變化著的分散式管理。版本管理系統通常以補丁的釋出為基礎,這實際上可能是一個日誌。您可以直接對當前原始碼 類似於表一樣做出一份"快照"。你會注意到, 與其他分散式狀態化系統類似,版本控制系統在 當你更新原始碼時會複製到日誌,當你提交新程式碼時,你只是將更新應用到你的當前快照中而已。 ”
這個觀點實際指出關於系統的歷史業務資料非常有價值的,我們只能在資料庫中獲得某個當前的狀態,而無法知道是透過如何操作得到當前的狀態。而業務日誌則儲存了系統的歷史運算元據。
一個日誌處理系統和版本控制系統之間是有差異的,日誌處理系統只記錄一個時間表,在版本控制系統允許您有多個行歷史。版本控制系統提供基本分支和合並功能,這使得它們比資料庫系統更復雜和更強大。
Kreps提出了資料表與事件是一對情侶,它們相互印證:
“這些日誌有點類似借貸清單和銀行的流程,資料庫表記錄的是當前的盈餘表。如果你有大量的操作日誌,你就可以使用這些操作從而建立可以捕獲當前狀態的表”
這個觀點和我們在領域事件/CQRS架構倡導的狀態和事件分離是一致的,從某種程度上將,我們使用EventSourcing來記錄領域事件然後播放,也是為了獲得系統某個時刻的狀態快照,這種原理與資料庫內部的日誌作用是同樣的,因此,可以看出我們使用DDD + CQRS + EventSourcing實際是將開啟資料庫這個盒子,直接用物件導向程式語言實現一個基於記憶體資料庫系統而已。
更重要的是,Kreps提出三種日誌的用途。
1.資料整合—能讓一個公司的所有資料容易整合儲存和處理。
2.實時流資料處理—以資料流方式計算
3.分散式系統設計—以日誌為中心的設計能簡化實踐中的分散式系統。
具有幾十年從業經驗的人說:我是從資料庫系統開始我的職業,我一直致力於傳統的日誌恢復工作中,還有設計實現類似的系統,然後將我的職業的三分子時間花在分散式系統上,花費了我大量時間在服務的複製上,使用非同步的日誌以確保資料的一致性。這意味著我過去三十年都是在和日誌打交道。
如果你是一個軟體工程師,你會在你的公司中聽到開發人員談論日誌、複製、日誌傳送等類似的話題,如果你想了解更多,你應該花一些更多時間閱讀Kreps這篇程式設計師史詩般的文章:
相關文章
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- 資料庫邏輯遷移方案資料庫
- oracle邏輯備份之--資料泵Oracle
- 7-03. 實現資料儲存和載入的邏輯
- 解析jwt實現邏輯JWT
- PostgreSQL邏輯複製資料同步到kafkaSQLKafka
- 資料庫,邏輯刪還是物理刪?資料庫
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- 宜信開源專注業務邏輯的輕量級服務框架nextsystem4框架
- PancakeSwap專案交易所繫統開發邏輯(原理)
- redis實現文章投票邏輯Redis
- 專注Markdown文字編輯器:Typora macMac
- 資料融合平臺,專注服務及資料整合
- 記一次資料、邏輯、檢視分離的原生JS專案實踐JS
- 做好招聘分析,HR必知的資料邏輯
- Vue原始碼探究-資料繫結邏輯架構Vue原始碼架構
- 二、python的邏輯運算與資料型別Python資料型別
- 資料分析應有的邏輯思維及分析方法
- 實現拼團業務邏輯
- 資料分析 | 資料視覺化圖表,BI工具構建邏輯視覺化
- 資料庫存資料時,邏輯上防重了為啥還會出現重複記錄?資料庫
- Java程式呼叫expdp資料泵實現自動邏輯備份Oracle資料庫的方案設計JavaOracle資料庫
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- 資料分析應學習邏輯思維和分析方法
- 輕投資專案優惠寄快遞程式賺錢邏輯
- 華為雲大資料輕模式體驗:忘掉底層煩惱,專注資料開發大資料模式
- 邏輯題
- 專注自主研發,加速大資料基礎軟體國產化程式大資料
- 抖音表情包專案的運營邏輯
- BBS專案功能編寫邏輯思路彙總
- 資料化與資訊化的邏輯,有本質的區別
- APP攻防--安卓逆向&資料修改&邏輯修改&檢視修改APP安卓
- SAP CRM產品主資料ID的生成邏輯介紹
- Amazon Redshift簡化資料管道背後的技術邏輯
- 利用WITH MOVE語句獲取資料庫邏輯檔名BG資料庫
- 如何將SQL寫成複雜邏輯 和構造資料SQL
- 達夢資料庫dexp邏輯匯出工具使用介紹資料庫
- 數字藏品開發現成版,數字藏品系統開發(邏輯原理)