iT邦幫忙

鐵人檔案

2024 iThome 鐵人賽
回列表
Software Development

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

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

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

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

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

參賽天數 25 天 | 共 25 篇文章 | 2 人訂閱 訂閱系列文 RSS系列文
DAY 11

先從 Datalog 談起 -- part 6 (more queries)

Datomic 資料庫可以視為是資料原子 (datom) 的集合,而資料原子是 5 個元素的數組 [eid attr val tx op]。 之前我們的查詢,都...

2024-08-30 ‧ 由 Laurence Chen 分享
DAY 12

先從 Datalog 談起 -- part 7 (more join)

對 SQL 有點研究的讀者,應該多少知道 SQL 有許多種不同的 join。但是,要說 SQL 有 7 種不同的 join 方式的話,我覺得也有點太誇張了。首先...

2024-08-31 ‧ 由 Laurence Chen 分享
DAY 13

先從 Datalog 談起 -- part 8 (predicates and transformation functions)

首先,我們要先定義兩個詞彙:斷言與轉換函數。 斷言 (predicate) 是一種特殊函數,它會接受判斷條件做為輸入,而它的輸出只有真 (true) 或是假...

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

先從 Datalog 談起 -- part 9 (aggregates and with clause)

給定一張 person 表,有一個欄位 date 表示出生日期,而我們要找出最年輕的一位時,可以用如下的 SQL 查詢。 SELECT MAX(date) AS...

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

先從 Datalog 談起 -- part 10 (find specs)

在前幾天介紹 Datalog 的範例裡,有一些特殊語法,讀者可能會相當困惑,這邊要來做詳細討論。 在 :find 子句裡的 [變數 ...] 。參考 Day1...

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

先從 Datalog 談起 -- part 11 (rules)

這篇與 Day11 類似,又是 Datalog 特有的功能。我們要來談論 Datalog 特有抽象機制: 規則 (rules)。 什麼是規則呢?像下方的 Dat...

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

先從 Datalog 談起 -- part 12 (cross database join)

在微服務的設計模式裡,每個服務獨立資料庫 (Database per service) 是一種常用的設計模式。 (註1) 要採用這種模式,若搭配 SQL 資料庫...

2024-09-05 ‧ 由 Laurence Chen 分享
DAY 18

先從 Datalog 談起 -- part 13 (SQL window function)

之前在 day 11 ,day 16, 與 day 17 ,我們談了一些 Datalog 特有的功能,比方說: 對資料表綱要 (table schema) 做...

2024-09-06 ‧ 由 Laurence Chen 分享
DAY 19

先從 Datalog 談起 -- part 14 (subqueries)

上一章,我們談到了 SQL 查詢的窗口函數 (window function) ,它在 Datalog 沒有直接的對應,但是,我們可以利用自訂聚合函數來做出類似...

2024-09-07 ‧ 由 Laurence Chen 分享
DAY 20

Pull API

讀者也許有聽過 GraphQL 這一類的圖學查詢語言,甚至也有使用過 GraphQL 。如果很喜歡 GraphQL 提供的圖學語意的話,Datomic 的 Pu...

2024-09-08 ‧ 由 Laurence Chen 分享