原创 數據庫內核雜談(十七):code-gen 深入學習

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ

原创 數據庫內核雜談(十六):Snowflake Elastic Data Warehouse

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ

原创 數據庫內核雜談(十四):Datometry and its Hyper-Q Platform

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ

原创 數據庫內核雜談(十三):如何把一個單機數據庫擴展成分佈式數據庫

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ

原创 數據庫內核雜談(十二):事務、隔離、併發(3)

之前的文章,我們分別介紹了鎖和時間戳機制來管理併發控制,這篇文章我們將介紹最被廣泛使用的方法——多版本併發控制Multi-Version Concurrency Control (MVCC)。爲什麼多版本併發控制更受歡迎呢?因爲鎖和時間戳機

原创 數據庫內核雜談(十一):事務、隔離、併發(2)

本篇文章選自數據庫內核雜談系列文章。 上一篇文章我們介紹了事務的ACID屬性和數據庫針對事務的不同隔離級別,本文我們將繼續討論實現事務的不同方法。 與教科書直接列出實現方法不同,本文將會由淺入深地介紹加鎖實現機制和時間戳機制這兩種不同實現方

原创 數據庫內核雜談(十):事務、隔離、併發(1)

本篇文章選自數據庫內核雜談系列文章。 在之前的文章,我們和大家分享了基本的數據庫優化器和執行器。這篇文章,我們要分享一個很重要的概念:事務及其相關實現。 事務(transaction)和ACID 事務的定義是:一個事務是一組對數據庫中數

原创 數據庫內核雜談(八):數據庫優化器(下)

在上一篇文章中,我們介紹了優化器的大概並且講解了一系列通過語句重寫來對查詢進行優化的方法。文末也留了一個坑:當語句中涉及到多個表的join時,優化器該如何決定join的順序(join ordering)來找到最優解呢?這期,我們接着這個話題

原创 數據庫內核雜談(七):數據庫優化器(上)

在上一篇文章中,我們挖了一個坑:在大部分情況下,HashJoin都是表現最優的,那爲什麼還需要去支持其他Join比如SortMergeJoin或者NestLoopJoin的算子實現呢?因爲不同表的大小,是否有索引支持,以及查詢語句是否對某些

原创 數據庫內核雜談(六):表的JOIN(連接)

在上篇文章中,我們主要介紹了排序和聚合的實現,覆蓋了單個表的大部分操作。但數據庫強大的地方在於,它能夠把現實中的某一塊業務,映射地表達成一系列的表的集合,並且其查詢語句SQL支持多個表相關聯的查詢操作。這種連接多表的查詢使得數據庫的功能得到

原创 數據庫內核雜談(五):如何實現排序和聚合

上篇文章中,我們着重介紹了對於一個SQL語句,數據庫是怎麼生成一個執行計劃,並根據這個執行計劃,一步一步地讀取,計算並獲得最後結果的。這一期,我們來聊一下兩個非常重要的算子(operator, 上一期我把operator翻譯成操作符,後來讀

原创 數據庫內核雜談(三):執行模式

在之前的文章中,我們通過存儲和索引,瞭解瞭如何把數據存儲在文件系統裏,然後根據不同的查詢語句,通過建立索引來提速讀取。今天,我們來聊一下當數據讀進內存後,數據庫怎麼繼續執行查詢。 之前系列文章都是以自底向上的線索來介紹數據庫內核。但在介紹具

原创 數據庫內核雜談(三):索引優化

在上一篇文章的末尾,我們留了一個坑。雖然通過列存,能夠避免讀取不必要的數據(沒使用的列)來提高查詢速度,但是對於下面這類點查詢(point query),還能不能進一步優化呢? SELECT * FROM titanic_survivor

原创 數據庫內核雜談(二):存儲“演化論”

數據庫是用來存儲海量數據的。存儲如此大量的數據,自然而然想到的就是以文件的形式存儲在硬盤(HDD或SSD)中。當然,一些商用數據庫爲了追求性能,是將數據優先存儲在內存中(比如SAP的HANA和MemSQL)來獲得更高速的讀寫。本文主要涉及的

原创 數據庫內核雜談(一):一小時實現一個基本功能的數據庫

數據庫內核博大精深,很多子系統的設計初看不知所云,但是細讀就會發現其已經做到了極致。但是市面上很少有類似的資源或者課程把數據庫內容的精髓講解出來,因此Facebook 現任 Tech Lead 顧仲賢撰寫了《數據庫內核雜談》的系列文章。