iT邦幫忙

鐵人檔案

2024 iThome 鐵人賽
回列表
Software Development

Datomic,內建事件溯源的資料庫。 系列

有一回,我看到某位在教 DDD (domain-driven design) 的老師寫到類似的內容,他開的事件溯源的課程,學員上完課之後,跟他表示,「老師,這個事件溯源,好像不知道要如何應用?」

類似的故事還有其它的,我曾經在某社服務過,也曾問過那邊的同事,他們是否曾經應用過事件溯源 (event sourcing) 。我的同事回答:「有,但是那個專案後來慘敗,還有人生氣就把工作辭了。」

奇怪,怎麼「事件溯源」我用起來就好好的,一點困難也沒有?

大家可能以為我要告訴你們,我是什麼 10x 工程師,不是,我是跟大家講,我的秘訣是直接使用一個內建事件溯源的資料庫:Datomic

鐵人鍊成 | 共 30 篇文章 | 5 人訂閱 訂閱系列文 RSS系列文
DAY 21

阻抗不匹配與 Datomic 的解決方案

在 day 4 的時候,我們談到了阻抗不匹配問題,並且提到了阻抗不匹配常見的兩個形式: N+1 查詢造成大量 I/O,拖慢效能。 N+1 查詢可能因為查詢之間...

2024-09-09 ‧ 由 Laurence Chen 分享
DAY 22

as-of 查詢

先來解說圖: 綠色的圓圈部分:代表「改變資料庫狀態的事件」,是一個又一個資料原子 (Datom)。資料原子是用 E/A/V/T/op 的形式記著真實世界的資...

2024-09-10 ‧ 由 Laurence Chen 分享
DAY 23

欄位綱要 (column schema)

Datomic 的 schema 比 SQL 資料庫靈活得多,這邊從三個不同的面向來探討靈活性: 不需要 NULL 值 共用欄位綱要 不需要使用橋接表 (b...

2024-09-11 ‧ 由 Laurence Chen 分享
DAY 24

Datomic 的寫入

在開始之前,我們要再做一些詞彙的釐清: 在 Datomic 的官方文件裡,對資料庫寫入稱之為交易 (transaction)。 在 Datomic 的官方文件...

2024-09-12 ‧ 由 Laurence Chen 分享
DAY 25

主鍵 (primary key) 與資料實體編碼 (entity id)

不知道大家有沒有跟我一樣,曾經為了該如何設計 SQL 資料表的主鍵 (primary key) 而困擾不已? 每次遇到這種問題,第一個要考慮的就是: 要用自然...

2024-09-13 ‧ 由 Laurence Chen 分享
DAY 26

條件限制 (constraints)

在 Day25 我們談到了列舉類型 (enum),某種程度來講,列舉類型也算是一種條件限制,它限制了填入特定欄位的值只能是某個固定的集合。 條件限制在 SQL...

2024-09-14 ‧ 由 Laurence Chen 分享
DAY 27

索引與效能

之前在 Day25 討論主鍵的設定有談到:可以視 Datomic 是一種高階資料庫,因為它讓使用者可以不用花心力去思考主鍵如何設計,把心力專注於業務邏輯 (bu...

2024-09-15 ‧ 由 Laurence Chen 分享
DAY 28

效能改進 -- part 1

Datomic 就像許多的資料庫一樣,資料量大了之後,就算是一般的查詢也很容易變慢。要改進 Datomic 的效能時,可以應用的方法有兩種: 指導原則 量測工...

2024-09-16 ‧ 由 Laurence Chen 分享
DAY 29

效能改進 -- part 2

在之前的好幾篇文章,談論主鍵 (prirmary key)、條件限制 (constraints)、索引 (index),我都主張 Datomic 是一種高階資料...

2024-09-17 ‧ 由 Laurence Chen 分享
DAY 30

Datomic 的商業價值:新的資料庫典範

參考這張圖,我們從三個不同的面向切入來探討 Datomc 帶來的價值。 事件溯源 Datomic 的事件溯源模型讓每次的交易 (transaction) 都被...

2024-09-18 ‧ 由 Laurence Chen 分享