自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入探索列式數(shù)據(jù)庫:是什么讓它們脫穎而出

存儲(chǔ) 存儲(chǔ)架構(gòu)
以列存儲(chǔ)數(shù)據(jù)的想法并不新鮮。它最早由 GP Copeland 和 SN Khoshafian 在 1985 年全面提出。他們的論文“A Decomposition Storage Model (DSM),”提出以二元關(guān)系存儲(chǔ)數(shù)據(jù),將每個(gè)屬性值與記錄的標(biāo)識(shí)符配對(duì)。

如果您是一名數(shù)據(jù)從業(yè)者,了解這些內(nèi)部原理可以幫助您優(yōu)化性能。

譯自Deep Dive into Columnar Databases: What Makes Them Shine,作者 Gaurav Ramesh。

列式存儲(chǔ)已成為數(shù)據(jù)工程和分析領(lǐng)域的一個(gè)顛覆者。與傳統(tǒng)的行式數(shù)據(jù)庫相比,它提供了顯著的性能優(yōu)勢(shì)。

以列存儲(chǔ)數(shù)據(jù)的想法并不新鮮。它最早由 GP Copeland 和 SN Khoshafian 在 1985 年全面提出。他們的論文“A Decomposition Storage Model (DSM),”提出以二元關(guān)系存儲(chǔ)數(shù)據(jù),將每個(gè)屬性值與記錄的標(biāo)識(shí)符配對(duì)。這種方法按列而不是按行組織數(shù)據(jù),為涉及屬性子集的查詢提供了簡單性和檢索性能優(yōu)勢(shì)。但是,它總體上需要更多的存儲(chǔ)空間。

研究人員于1999 年開始開發(fā) MonetDB,并于 2004 年將其作為開源項(xiàng)目發(fā)布。它成為首批采用列式架構(gòu)進(jìn)行分析工作負(fù)載并展示其有效性的系統(tǒng)之一。在 2000 年代中期開發(fā)的C-Store標(biāo)志著另一個(gè)重要的里程碑。它引入了先進(jìn)的概念,這些概念現(xiàn)在已成為現(xiàn)代列式存儲(chǔ)系統(tǒng)中的標(biāo)準(zhǔn)。

在 2000 年代后期和 2010 年代初期,該領(lǐng)域的發(fā)展加速,Apache Parquet等項(xiàng)目(受Google 的 Dremel 論文的影響)將列式存儲(chǔ)引入了 Hadoop 生態(tài)系統(tǒng)。

核心概念:列式存儲(chǔ)與行式存儲(chǔ)

傳統(tǒng)的行式數(shù)據(jù)庫將單個(gè)行的所有數(shù)據(jù)存儲(chǔ)在一起。一行表示您要建模的實(shí)體。從這個(gè)角度來看,對(duì)于這篇文章,可以將面向文檔的數(shù)據(jù)庫(如 MongoDB)視為行式數(shù)據(jù)庫,因?yàn)樗鼘⒄麄€(gè)文檔(實(shí)體)存儲(chǔ)在一起,類似于行式數(shù)據(jù)庫。相比之下,列式數(shù)據(jù)存儲(chǔ)將數(shù)據(jù)組織成列,每列包含所有行中單個(gè)屬性的值。這種看似簡單的更改對(duì)性能產(chǎn)生了深遠(yuǎn)的影響。

查詢處理中的謂詞和投影

在討論事務(wù)和分析系統(tǒng)時(shí),需要理解兩個(gè)關(guān)鍵概念:

  • 謂詞是您用來過濾所需實(shí)體(行)的條件(將它們視為 SQL 查詢中的WHERE子句)。
  • 投影是您在響應(yīng)中需要的字段(列)(將它們視為在SELECT語句中定義的名稱)。

如果您將數(shù)據(jù)視為垂直堆疊的行列表,則謂詞會(huì)水平切片,而投影會(huì)垂直切片。

事務(wù)查詢通常依賴于謂詞來過濾行,投影跨越整行(例如,SELECT * FROM orders WHERE user_id = 1234)。相比之下,分析查詢中的投影涉及被查詢實(shí)體的一小部分字段(例如,SELECT user_id, name, num_orders FROM user_aggregates WHERE user_id = 1234)。

考慮一個(gè)包含 50 列和數(shù)百萬行的表。在行式系統(tǒng)中,如果您只需要三列,數(shù)據(jù)庫仍然必須讀取每行的所有 50 列。使用列式存儲(chǔ),僅訪問三個(gè)相關(guān)的列,從而大大減少了 I/O 開銷,即在分析中處理的數(shù)據(jù)量查詢。

支持列式存儲(chǔ)的關(guān)鍵技術(shù)

以列存儲(chǔ)數(shù)據(jù)可以實(shí)現(xiàn)各種優(yōu)化,從而顯著提高查詢性能。這是一個(gè)思維模型:將查詢執(zhí)行視為一個(gè)通過各個(gè)階段傳遞數(shù)據(jù)的管道,并在每個(gè)步驟中對(duì)其進(jìn)行轉(zhuǎn)換。數(shù)據(jù)越小,成本越低,管道速度越快。

減少數(shù)據(jù)您可以使用多種方法:

  • 高效的數(shù)據(jù)表示(數(shù)據(jù)壓縮,列式壓縮)
  • 提前過濾數(shù)據(jù)(列裁剪,謂詞下推)
  • 盡可能晚地?cái)U(kuò)展數(shù)據(jù)(直接對(duì)壓縮數(shù)據(jù)進(jìn)行操作,延遲物化)
  • 更快的數(shù)據(jù)處理(向量化執(zhí)行,優(yōu)化連接)

這些技術(shù)是相互關(guān)聯(lián)的,并且相互依賴以獲得最大的性能提升。

數(shù)據(jù)壓縮和列式壓縮

列式存儲(chǔ)實(shí)現(xiàn)了高壓縮率,因?yàn)閱蝹€(gè)列中的數(shù)據(jù)類型相同并且表現(xiàn)出相似的模式。諸如字典編碼、運(yùn)行長度編碼 (RLE)、位打包和增量編碼等技術(shù)通常用于現(xiàn)代列式存儲(chǔ)中。

例如,在跟蹤用戶流量來源的 Web 分析數(shù)據(jù)庫中,source列通常具有一小組唯一值。 這允許:

  • 字典編碼:將整數(shù)值分配給字符串值(例如,email = 1,Twitter = 2)。
  • 運(yùn)行長度編碼 (RLE):如果連續(xù)條目具有相同的值,則將其存儲(chǔ)為(值,計(jì)數(shù))。
  • 位打包:如果只存在幾個(gè)唯一值,則每個(gè)值使用較少的位而不是完整的整數(shù)。

列裁剪

列裁剪消除了查詢執(zhí)行中不必要的列。 考慮以下查詢:

SELECT first_name, last_name, email, phone FROM users WHERE num_orders > 10

如果表有 100 列,但查詢只需要 5 列,則列裁剪可將 I/O 開銷降低 95%。

謂詞下推

謂詞下推在查詢執(zhí)行管道中盡早地過濾數(shù)據(jù)。 通過使用區(qū)域圖(跟蹤存儲(chǔ)塊內(nèi)最小值/最大值的元數(shù)據(jù)),數(shù)據(jù)庫可以跳過不符合過濾條件的整個(gè)塊。

例如,在查詢中:

SELECT name FROM users WHERE age > 30 AND city = 'New York'

列式數(shù)據(jù)庫可以首先根據(jù)元數(shù)據(jù)過濾塊,然后再掃描單個(gè)行,從而減少不必要的處理。

直接對(duì)壓縮數(shù)據(jù)進(jìn)行操作

列式數(shù)據(jù)庫可以直接對(duì)壓縮數(shù)據(jù)執(zhí)行操作,從而最大限度地降低 I/O 成本。 考慮以下查詢:

SELECT sum(salary) FROM employees WHERE department = 1002

使用字典編碼和 RLE,只有相關(guān)數(shù)據(jù)在最后一步被讀取和擴(kuò)展,從而顯著提高性能。

延遲物化

延遲物化會(huì)延遲加載不必要的列,直到需要時(shí)才加載。 在查詢中:

SELECT name FROM users WHERE age > 30 AND city = 'New York'

最初只處理 age 和 city,name 列在最后階段加載。

向量化處理

SIMD(單指令多數(shù)據(jù))允許處理器并行地對(duì)多個(gè)值執(zhí)行操作。 考慮:

SELECT sum(price) FROM sales WHERE user_id = 1234

SIMD 不是逐行評(píng)估 user_id,而是一次比較 256 個(gè)值,從而顯著提高速度。

高效的連接實(shí)現(xiàn)

列式數(shù)據(jù)庫實(shí)現(xiàn)了高級(jí)連接技術(shù),例如使用 Bloom 過濾器的半連接。 這些結(jié)構(gòu)允許數(shù)據(jù)庫有效地檢查數(shù)據(jù)集中是否存在某個(gè)值,從而減少不必要的比較。

例如,在連接中:

SELECT * FROM orders o JOIN customers c ON o.customer_id = c.id WHERE c.region = 'EMEA'

為有效客戶構(gòu)建 Bloom 過濾器,允許數(shù)據(jù)庫快速丟棄不相關(guān)的訂單。

結(jié)論

列式數(shù)據(jù)存儲(chǔ)提供:

  • 通過壓縮實(shí)現(xiàn)存儲(chǔ)效率
  • 通過列裁剪和謂詞下推實(shí)現(xiàn)減少 I/O
  • 使用向量化處理和優(yōu)化連接實(shí)現(xiàn)更快的執(zhí)行速度

它們廣泛用于 Web 分析、商業(yè)智能、機(jī)器學(xué)習(xí)基礎(chǔ)設(shè)施和實(shí)時(shí)分析。

如果您是數(shù)據(jù)從業(yè)者,了解這些內(nèi)部原理可以幫助您優(yōu)化性能。 如果您是工程負(fù)責(zé)人,這些技術(shù)將幫助您評(píng)估權(quán)衡并為您的組織做出戰(zhàn)略決策。

責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2014-02-24 13:55:47

簡歷簡歷技巧

2016-05-12 13:51:05

IBM大型機(jī)混合云

2009-04-13 10:52:03

視頻面試求職技巧

2013-03-25 16:39:42

華為BYOD解決方案

2013-08-27 15:45:37

App應(yīng)用商店ASO應(yīng)用商店優(yōu)化App營銷推廣

2021-08-17 07:15:16

Github開源項(xiàng)目

2012-08-08 10:00:17

面試技術(shù)

2015-08-06 10:03:03

云計(jì)算云計(jì)算認(rèn)證云遷移

2024-06-20 09:44:19

Vars()函數(shù)Python工具

2014-09-02 15:25:10

國產(chǎn)操作系統(tǒng)

2011-12-27 15:02:37

云計(jì)算

2018-06-03 00:16:36

阿里巴巴技術(shù)面試

2020-02-14 09:50:19

數(shù)據(jù)中心IT技術(shù)

2015-10-27 10:13:42

初創(chuàng)公司脫穎而出

2018-01-11 23:07:07

構(gòu)建生態(tài)垂直落地AIoT

2015-03-06 09:21:41

APP

2010-08-04 14:11:58

面試木訥

2017-05-02 14:40:20

程序員

2009-09-10 09:48:25

IT職場

2011-11-07 09:43:08

郭為云計(jì)算C時(shí)代
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)