A Relational Model of Data for Large Shared Data Banks(大型共享資料庫的關聯式資料模型)
把資料視為隨時間變動的 n 元關聯,並以述詞演算查詢,讓程式不再因儲存方式、索引或存取路徑改變而失效。
Organization and Maintenance of Large Ordered Indices(大型有序索引的組織與維護)
B-tree:以磁碟頁為節點、永遠保持平衡的有序索引,查詢與更新成本都極低。
Retrospection on a Database System(一套資料庫系統的回顧)
一份坦白的工程回顧:打造能真正跑起來的關聯式 DBMS 究竟付出多少代價,又有哪些設計根本是錯的。
The Transaction Concept: Virtues and Limitations
把 atomicity、consistency、durability 立為交易的三大性質,再誠實指出巢狀與長時間交易會在哪裡撐不住。
Jim Gray 的八篇交易論文(Eight Transaction Papers by Jim Gray)
回顧 Jim Gray 八篇交易論文,串起從 two-phase locking 到 Paxos Commit 的交易抽象建構史。
Looking Back at Postgres(回顧 Postgres)
回顧柏克萊 Postgres:一套以可擴展性為核心的物件關聯式設計,孕育了 PostgreSQL 與整個世代的資料庫系統。
GAMMA - A High Performance Dataflow Database Machine
第一台真正跑起來的 shared-nothing 平行資料庫:一顆處理器配一顆磁碟,關聯全部分割,查詢以自我排程的資料流執行。
Parallel Database Systems: The Future of High Performance Database Processing
以 shared-nothing 硬體、資料分割與 split/merge 資料流執行環境,讓關聯式查詢取得近乎線性的 speedup 與 scaleup。
ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging
ARIES 以「重演歷史」再搭配 redo-only 的補償日誌,讓細粒度鎖定下的當機復原同時做到正確與快速。
Data Cube:一個一般化 Group-By、Cross-Tab 與小計的關聯式聚合運算子
CUBE 運算子:一個 SQL 子句就一次算完 N 個維度上所有的 group-by,而且結果仍是一個關聯。
The Log-Structured Merge-Tree (LSM-Tree)
把索引插入延後並批次化,交給層層串接的排序合併處理,將磁碟臂成本壓低近兩個數量級的磁碟索引結構。
The Part-Time Parliament(兼職議會)
Paxos:以多數決 quorum 讓複本日誌在節點故障與訊息遺失下維持一致,並在網路穩定時取得進展。
Paxos Made Simple
用白話重新推導 Paxos,說明容錯共識幾乎是從「多數派 acceptor 必須達成一致」這個要求無可避免地長出來的。
Perspectives on the CAP Theorem
CAP 的權威重述:重點不是三選二,而是不可靠網路上安全性與存活性無法兼得的不可能性。
The Google File System
一套把商用硬體故障視為常態、檔案視為巨大、並把並行 append 當成一級原子操作的叢集檔案系統。
MapReduce: Simplified Data Processing on Large Clusters
一個把平行化、容錯、資料局部性與負載平衡全部藏進函式庫的模型,使用者只需寫 map 與 reduce 兩個函式。
C-Store: A Column-oriented DBMS
以重疊的排序投影、壓縮欄位與可更新寫入儲存打造的讀取最佳化欄式資料庫,並以 snapshot isolation 取代查詢鎖定。
The Vertica Analytic Database: C-Store 7 Years Later
C-Store 商品化七年後的工程覆盤:哪些欄式儲存的研究構想撐過了真實客戶,哪些被丟掉。
Cassandra - A Decentralized Structured Storage System(Cassandra:一套去中心化的結構化儲存系統)
把 Dynamo 的無主環狀分散架構接上 Bigtable 的 column family 資料模型,扛下每天數十億次寫入的生產級儲存系統。
Hive - A Warehousing Solution Over a Map-Reduce Framework(Hive:建構於 Map-Reduce 框架之上的資料倉儲方案)
把 SQL 式資料倉儲蓋在 Hadoop 上:HiveQL 編譯成 map-reduce DAG,並搭配系統目錄、分割、bucket 與可插拔 SerDe。
Spark: Cluster Computing with Working Sets
Resilient distributed dataset:可快取、能靠 lineage 重建的分散式集合,讓叢集把工作集留在記憶體中反覆重用。
Kafka: a Distributed Messaging System for Log Processing
一套面向大量事件資料的分散式 commit log:topic 切分成 partition、只做 append 的 segment 檔、由 consumer 自己保管 offset 的 pull 模式,加上 zero-copy 傳輸。
Spanner: Google's Globally-Distributed Database
第一個把時鐘不確定性攤在時間 API 上、再用等待把它耗掉,從而讓全球分散式交易具備外部一致性的資料庫。
Calvin: Fast Distributed Transactions for Partitioned Database Systems
先以決定性方式排定交易順序再執行,分割式資料庫就能完全捨棄兩階段提交。
Presto: SQL on Everything
一套具適應性的分散式 SQL 引擎,同時支撐次秒級儀表板與長達數小時的 ETL,並可插接數十種資料來源。
Evolution of Development Priorities in Key-value Stores Serving Large-scale Applications: The RocksDB Experience(服務大規模應用的鍵值儲存系統,其開發優先順序的演變:RocksDB 的經驗)
RocksDB 在 Facebook 規模下運行八年的實戰報告:最佳化目標如何從寫入放大轉到空間放大,再轉到 CPU。
In Search of an Understandable Consensus Algorithm (Extended Version)
一套以可理解性為設計目標的 leader 式共識演算法,安全性與效率等同 multi-Paxos,但教得會也寫得出來。
The Snowflake Elastic Data Warehouse(Snowflake 彈性資料倉儲)
把資料倉儲拆成 blob 儲存、用完即丟的運算叢集,與共用的中繼資料大腦,讓彈性成為架構本身的性質。
Delta Lake: High-Performance ACID Table Storage over Cloud Object Stores
在原生雲端物件儲存上做出 ACID 資料表:靠一份以 Parquet 做 checkpoint 的 WAL,完全不需要常駐的 metadata 服務。
Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics(Lakehouse:統一資料倉儲與進階分析的新一代開放平台)
一份設計藍圖:直接在雲端物件儲存的開放 Parquet 檔案之上,做出倉儲級的交易、索引與 SQL 效能。
DuckDB: an Embeddable Analytical Database(DuckDB:可嵌入的分析型資料庫)
一顆與應用程式同行程執行的 SQL 引擎,把向量化 OLAP 帶進 SQLite 空著的嵌入式位置。
FoundationDB: A Distributed Unbundled Transactional Key Value Store(FoundationDB:一套分散式、拆解式的交易型 key-value 儲存系統)
把資料庫拆解成互不耦合的元件,在 NoSQL 規模上提供可序列化的 ACID 交易,並用確定性模擬驗證每一項功能。
Disaggregated State Management in Apache Flink 2.0
把串流狀態的主要儲存搬到遠端檔案系統,再用非同步、亂序的記錄執行模型把遠端延遲藏起來。