- Multi-cluster, shared-data architecture(多叢集共享資料架構)
- Snowflake 為自身設計取的名字:多座彼此獨立的 shared-nothing 運算叢集,共同讀取放在 blob 儲存上的同一份資料,本機磁碟只用於快取與暫存資料。它保留了 shared-nothing 的執行效率,卻把這份效率與「誰擁有資料」解耦。
- Virtual warehouse(VW,虛擬倉儲)
- 一群 EC2 worker node,以 X-Small 到 XX-Large 的抽象 T 恤尺寸呈現給單一使用者。它是純運算資源,可隨時建立、改變大小或銷毀而不影響資料庫狀態,且每一道查詢只在恰好一座 VW 上執行。
- Table file(表檔案)
- 儲存的基本單位:表被水平切分成的一個個巨大且不可變的檔案,相當於傳統資料庫中的 block 或 page。寫入永遠不會修改既有檔案,而是以加入與移除整個檔案的方式產生新的表版本。
- PAX/混合欄式(hybrid columnar)
- 表檔案內部的配置方式:同一欄的值聚在一起並重度壓縮,檔頭記錄每一欄的位移。搭配 S3 的範圍 GET,查詢就只需下載自己引用到的那幾欄。
- Pruning(裁剪)
- 利用每個檔案的 min/max 中繼資料(文獻中也稱 small materialized aggregates、zone map 或 data skipping)判定某個檔案不可能滿足述詞,於是整檔跳過。在 Snowflake 中它取代索引,成為唯一的資料存取限縮機制,而且完全不需要使用者輸入。
- File stealing(偷檔案)
- 處理資料傾斜的技巧:先掃完自己輸入檔案的 worker process 會向同儕索取更多檔案,手上還剩很多檔案的同儕便讓出其中一個檔案的所有權,範圍與期間都僅限當前這道查詢。索取者是直接從 S3 下載該檔案而非向同儕要,因此落後節點不會被加重負擔。
- VARIANT
- 一種 SQL 型別,可以裝任何原生 SQL 值、變動長度的 ARRAY,或由字串映射到 VARIANT 的 OBJECT,全部共用同一套自我描述的緊湊二進位編碼。由於該編碼支援快速查找、型別測試、比較與雜湊,VARIANT 欄位能像一般欄位一樣當 join key、grouping key 與排序鍵。
- Optimistic conversion(樂觀轉換)
- 在寫入時就把日期這類以字串編碼的值轉成真正的 SQL 型別,同時把原始字串留在另一欄,除非該轉換完全可逆才省略。它換來讀取速度與日期欄位的 pruning 中繼資料,又不會在那些「只是長得像日期或數字」的值上遺失資訊。
- Time travel(時光回溯)
- 用 AT 或 BEFORE 搭配絕對時間、相對位移或先前某道敘述的 ID,去讀取表、綱要或整個資料庫的舊版本。它之所以可行,是因為被新版本移除的檔案會保留一段可設定的期間(目前最長 90 天),UNDROP 也建立在同一份中繼資料之上。