多年前,有一本 Martin Fowler 寫的書,NoSQL Distilled,它將 NoSQL 資料分成四大類別:
也許是因為這本書對業界的影響,當我談論 Datomic 資料庫時,常常遇到友人在第一時間詢問我,Datomic 是哪一類別的資料庫?我想,友人期待的答案應該是某個類別,這樣子就可以快速地對 Datomic 產生大概的認知。
然而,我的答案是:「它自成一類,而合理的類別應該稱之為 Clojure-Datalog 資料庫。」
會有這個答案有兩個原因:
讀者看到了資料庫的類別名稱之後,心裡可能覺得,「咦,Clojure?這不是程式語言嗎?這跟 Datomic 有關嗎?」
Datomic 是用 Clojure 語言開發的資料庫,但是,Datomic 與 Clojure 的關系非比尋常,下圖是個類比來說明它們的緊密關系。
Clojure 語言和 Datomic 資料庫的發明者是 Rich Hickey ,而 Rich Hickey 對於程式設計有他獨樹一格的思想:
在介面層次:他喜歡彈性與表現能力。所以在程式語言,他選擇了 Lisp 語法;在資料庫,他選擇了 Datalog 查詢語言。
在確保系統簡單、容易理解、容易除錯方面:他認為函數式編程 (functional programming) 至關重要。所以在程式語言,他實作了不可變動的容器 (immutable collection) ;在資料庫,他實作了事件溯源 (event sourcing)。
最後,為了讓創新可以被商業化使用:他貫徹「不要重造輪子,接軌既有的生態系」的哲學。所以在程式語言,他讓程式語言寄生在 JVM 生態系中,Clojure 語言可以編繹成為 Java byte code ,並且與 JVM 做到良好的交互;在資料庫,他讓 Datomic 可以使用許多不同種類的鍵值儲存 (key-value store) 來做資料儲存層 (storage layer)。(註2)
註:
其它資源: