在這篇論文之前 — 它所降落的世界
1983 年 Boral 與 DeWitt 曾寫過一篇著名的批判,認為資料庫機器是一個時代已經過去的點子,而當時證據站在他們那一邊:十年的研究追逐過 CCD 記憶體、磁泡記憶體、head-per-track 磁碟與光碟,沒有一項兌現承諾。預測指出處理器速度的成長會遠快於磁碟吞吐量,批評者因此認為多處理器很快就會被 I/O 卡死。同一時間,大型主機的設計者做不出單一機器來服務上千個同時使用者,或掃描 TB 級的關聯式資料庫。Encore、Intel、NCR、nCUBE、Sequent、Tandem、Teradata 與 Thinking Machines 陸續推出便宜的微處理器機器,而建立在高速區域網路上的訊息式 client-server 作業系統也從研究玩具變成主流架構。Teradata 從 1978 年起就低調地出貨高度平行的 SQL 機器,Tandem 與一批新創隨後跟上,所以 1992 年要問的已經不是平行資料庫行不行,而是它為什麼行。
術語 — 依本篇論文的用法
- 線性 speedup
- 指硬體規模或成本放大 N 倍,同一份固定工作就快 N 倍,量測方式是小系統耗時除以大系統耗時。speedup 固定問題大小,只放大硬體。
- 線性 scaleup
- 指放大 N 倍的系統能在相同時間內完成放大 N 倍的工作,也就是「小系統跑小問題的耗時」除以「大系統跑大問題的耗時」等於 1。交易 scaleup 同步放大用戶端數量、小請求數量與資料庫大小;批次 scaleup 則是同一句查詢跑在 N 倍大的資料庫上。
- 干擾(interference)
- 指每新增一個行程時,因為爭用全域記憶體、快取或互連網路等共用資源,而對其他所有行程造成的拖慢。這正是 shared-nothing 架構要極小化的障礙,因為即使只有 1% 的干擾也會讓 speedup 上限卡在 37。
- 偏斜(skew)
- 指平行各步驟的大小或成本變異數超過平均值,使整份工作的完成時間由最慢的一步決定,再增加平行度也幾乎沒有幫助。論文區分資料偏斜(多數 tuple 集中在單一分割)與執行偏斜(多數工作落在單一節點)。
- shared-nothing
- 一種硬體架構,每塊記憶體與磁碟由單一處理器擁有並擔任該份資料的伺服器,處理器之間只透過互連網路傳送訊息溝通。由於原始的記憶體與磁碟存取都留在本地,網路上只流動過濾後的結果。
- declustering(資料分割)
- 把單一關聯的 tuple 散佈到多顆磁碟上,每顆磁碟各自掛在自己的處理器下,使該關聯能被平行掃描。它是分割式執行在儲存層的前提,並且不需要 RAID 專用硬體就能取得多磁碟頻寬。
- split 運算子
- 一種資料流節點,依每筆 tuple 的屬性值把某個運算子的輸出串流分割或複製成多條獨立串流,映射到指定的目的行程與埠。它同時實作緩衝與流量控制,輸出緩衝區塞滿時會擋住上游生產者。
- merge 運算子
- 一種資料流節點,把多條平行資料串流併成單一循序串流,送進下游運算子的某個輸入埠。它與 split 搭配,使未經修改的循序關聯式運算子得以平行執行。
- hash join
- 一種 join 演算法,先把兩個關聯依 join 屬性做 hash 分割,再把第一個關聯的某個分割建成主記憶體 hash table,並以第二個關聯的對應分割逐筆探測。它的成本是線性而非 n log n,也比 sort-merge join 更耐偏斜,除非輸入本來就已排序。