Apache开源列式存储引擎Parquet和ORC比较
?
相比傳統(tǒng)的行式存儲(chǔ)引擎,列式存儲(chǔ)引擎具有更高的壓縮比,更少的IO操作而備受青睞(注:列式存儲(chǔ)不是萬(wàn)能高效的,很多場(chǎng)景下行式存儲(chǔ)仍更加高效),尤其是在數(shù)據(jù)列(column)數(shù)很多,但每次操作僅針對(duì)若干列的情景,列式存儲(chǔ)引擎的性價(jià)比更高。在互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用場(chǎng)景下,大部分情況下,數(shù)據(jù)量很大且數(shù)據(jù)字段數(shù)目很多,但每次查詢數(shù)據(jù)只針對(duì)其中的少數(shù)幾行,這時(shí)候列式存儲(chǔ)是極佳的選擇,目前在開(kāi)源實(shí)現(xiàn)中,最有名的列式存儲(chǔ)引擎是Parquet和ORC,在最近一年內(nèi),它們都晉升為Apache頂級(jí)項(xiàng)目,可見(jiàn)它們的重要性。本文嘗試比較這兩種存儲(chǔ)引擎。
Apache Parquet
源自于google Dremel系統(tǒng)(可下載論文參閱),Parquet相當(dāng)于Google Dremel中的數(shù)據(jù)存儲(chǔ)引擎,而Apache頂級(jí)開(kāi)源項(xiàng)目Drill正是Dremel的開(kāi)源實(shí)現(xiàn)。
Apache Parquet 最初的設(shè)計(jì)動(dòng)機(jī)是存儲(chǔ)嵌套式數(shù)據(jù),比如Protocolbuffer,thrift,json等,將這類(lèi)數(shù)據(jù)存儲(chǔ)成列式格式,以方便對(duì)其高效壓縮和編碼,且使用更少的IO操作取出需要的數(shù)據(jù),這也是Parquet相比于ORC的優(yōu)勢(shì),它能夠透明地將Protobuf和thrift類(lèi)型的數(shù)據(jù)進(jìn)行列式存儲(chǔ),在Protobuf和thrift被廣泛使用的今天,與parquet進(jìn)行集成,是一件非容易和自然的事情。 除了上述優(yōu)勢(shì)外,相比于ORC, Parquet沒(méi)有太多其他可圈可點(diǎn)的地方,比如它不支持update操作(數(shù)據(jù)寫(xiě)成后不可修改),不支持ACID等。
Apache ORC
ORC(OptimizedRC File)存儲(chǔ)源自于RC(RecordColumnar File)這種存儲(chǔ)格式,RC是一種列式存儲(chǔ)引擎,對(duì)schema演化(修改schema需要重新生成數(shù)據(jù))支持較差,而ORC是對(duì)RC改進(jìn),但它仍對(duì)schema演化支持較差,主要是在壓縮編碼,查詢性能方面做了優(yōu)化。RC/ORC最初是在Hive中得到使用,最后發(fā)展勢(shì)頭不錯(cuò),獨(dú)立成一個(gè)單獨(dú)的項(xiàng)目。Hive 1.x版本對(duì)事務(wù)和update操作的支持,便是基于ORC實(shí)現(xiàn)的(其他存儲(chǔ)格式暫不支持)。ORC發(fā)展到今天,已經(jīng)具備一些非常高級(jí)的feature,比如支持update操作,支持ACID,支持struct,array復(fù)雜類(lèi)型。你可以使用復(fù)雜類(lèi)型構(gòu)建一個(gè)類(lèi)似于parquet的嵌套式數(shù)據(jù)架構(gòu),但當(dāng)層數(shù)非常多時(shí),寫(xiě)起來(lái)非常麻煩和復(fù)雜,而parquet提供的schema表達(dá)方式更容易表示出多級(jí)嵌套的數(shù)據(jù)類(lèi)型。
Parquet與ORC對(duì)比
總結(jié)
目前在互聯(lián)網(wǎng)領(lǐng)域,列式存儲(chǔ)已經(jīng)逐步被用于各種產(chǎn)品線中,比如twitter已經(jīng)將部分?jǐn)?shù)據(jù)格式轉(zhuǎn)換為parquet,所占空間和查詢時(shí)間減少了約1/3(來(lái)源:https://adtmag.com/articles/20 ... .aspx?)。在Twitter,日志格式使用thrift描述,使用Parquet存儲(chǔ),下圖是一個(gè)典型的數(shù)據(jù)格式描述,共有87個(gè)字段,7層嵌套關(guān)系。
?
總結(jié)
以上是生活随笔為你收集整理的Apache开源列式存储引擎Parquet和ORC比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android poi使用教程,poi的
- 下一篇: K_A16_003 基于STM32等单片