資料庫行式和列式儲存

2021-08-01 05:58:02 字數 1686 閱讀 7755

關係型資料庫是以二維表的形式呈現資料,這種呈現是邏輯上的展示。

一般具體儲存在硬碟上,以何種方式儲存,對於資料庫操作效能來說,至關重要。

對於硬碟來說,最昂貴的操作是查詢。為了提高最終效能,所需要的相關資料應該以某種方式去儲存從而使「查詢」操作盡可能少。硬碟由一系列規定大小的塊(block)組成, 通常足以容納資料表的幾行。通過把相關的行儲存在塊中,僅僅一定數量的塊需要被讀取從而最小化了查詢的數量。

行式儲存模型

好現在我們開始讓磁碟裡塞,假設我們的磁碟塊只能容下5個字段(抽象的,假設我們的這些欄位的大小都一樣),因為我們是按找行優先的,所以結果就如下:

於是當我們要找jones的所有資訊的工資時候,我們會依次從第一塊磁碟塊直到掃瞄到最後(為什麼要掃到最後,因為是在找全部叫jones的資訊,所以不掃都最後都不能確定是否會遺漏)。一共需要掃4塊,然後取出其第二塊和第四塊資訊,找出其工資的資訊。

其實基於行式儲存,對於where語句處理都需要處理全表。對於磁碟的不停seek,速度就可想而知。當然一般資料庫為了應對這種全資料掃瞄,找到了建立索引的方法。而索引就是對某個或者某些欄位的組合的資訊,即取出資料的部分資訊,以減少每次掃瞄從全表到部分資訊的掃瞄的過渡。

這種查詢方式很適合於一次取出乙個行資料,而對於日常應用系統來說這種方式是非常合適的,因為我們設計應用的時候都是針對乙個事務,而我們會把乙個事務所有屬性儲存成一行,使用的時候也是有很大的概率涉及到整行的資訊,很利於做快取。還比如我們經常使用的那些經典sql 語句:

select * from user where id = 1001;

select id, user_name, email, address, gender, … from user where id = 1001;

列式儲存模型

而列儲存就是下圖這種按列優先儲存。為了方便我們每塊只儲存了乙個一列,沒有存滿。

這下我們再考慮上面的查詢所有jones的工資,這下我們只掃瞄第三個磁碟塊,找出jones都再那些行,然後根據查出來的行號,直接去第五塊磁碟(這塊對應的式salary列)找出第

二、四行的資料,然後輸出。一共2次seek。大大小於row-oriented的4次。

這種查詢方式的前提就是你就需要這列資料就行了,其前提假設就是查詢基本不會使用這個行的其他列資料。顯然這種假設對於日常作業系統的圍繞著乙個主題進行的活動是不合適旳。但是卻在分析型資料大顯身手。

列式的另一大優勢是壓縮。因為列的天然凝聚性(比如上面的兩個jones就可以壓縮成乙個)大大強與行,所以列式儲存可以有很高的壓縮比,這個進一步使使用的磁碟的數量減少,因為使用的磁碟塊少,進一步減少了需要掃瞄的次數。這方面很利於加快查詢速度,但是因為解壓縮也是耗時耗記憶體的過程,所以壓縮的控制也是需要乙個定平衡點。

優劣總結

從上面的例子可以明顯看出列式資料庫在分析需求(獲取特點——每次查詢幾個維度,通常是)時候,不僅搜尋時間效率佔優勢,其空間效率也是很明顯的。特別是針對動輒按t計算的資料量來說,在分布式環境中能進行壓縮處理能節省寶貴的內部頻寬,從而提高整個計算任務效能。

列式資料庫和行式資料庫

列式資料庫 是以列相關儲存架構進行資料儲存的資料庫,主要適合於批量資料處理和即時查詢。相對應的是行式資料庫,資料以行相關的儲存體系架構進行空間分配,主要適合於小批量的資料處理,常用於聯機 事務型資料處理。優點 缺點 資料庫以行 列的二維表的形式儲存資料,但是卻以一維字串的方式儲存,例如以下的乙個表 ...

列式儲存和行式儲存

行式儲存資料庫和列式儲存資料庫,隨著業務深入,技能增長,經常會碰到,今天來理解一下。列式儲存 clolumn based 和行式儲存 row based 都是相對於對方的,他們的區別是在磁碟的儲存方式不同,所以在讀寫資料時,方式不同,以至於他們的適用場景也都不同。列式儲存資料庫主要包括 hbase,...

行式資料庫與列式資料庫

1.行式資料庫與列式資料庫 行式資料庫和列式資料庫的不同在於物理儲存方式的不同 待考證 列式資料庫 是以列相關 儲存 架構進行資料儲存的 資料庫 主要適合與批量 資料處理 和即席查詢 相對應的是行式資料庫,資料以行相關的 儲存 體系架構進行空間分配,主要適合與小批量的 資料處理 常用於聯機 事務 型...