orc格式和parquet格式對比
相比傳統的方式存儲引擎,列式存儲引擎具有更高的壓縮比,更少的IO操作而備受青睞,尤其是在數據列column數很多,單詞操作僅針對若幹列的情景,列式存儲引擎的性價比更高.
在互聯網數據應用場景下,大部分情況下,數據很大且數據字段很多,但每次查詢數據隻針對其中的少數幾行,這時候列式存儲是極佳的選擇,目前在開源實現中,最有名的列式存儲引擎parquet 和orc ,在最近一年內,他們都晉升apache頂級項目 可見它的重要性,本文嚐試比較這兩種存儲引擎.
Apache Parquet
源自google Dremel 係統,Parquet 相當一Dremel中的數據存儲引擎,而Apache頂級開源醒目 Drill正式Dremel的開源實現.
Apache Parquet 最初的設計動機是存儲嵌套式數據,比如Protocolbuffer thrift json 等 將這類數據存儲成列式格式以方便對其高效壓縮和編碼,且使用更少的IO操作取出需要的數據,也是Parquet 相比於ORC的優勢,它能透明的將protobuf 和thrift被廣泛的使用的今天,於parquet 進行集成,是一件非常容易和自然地事情,除了上述優勢外,相比於ORC,Parquet 沒有太多其他可圈可點的地方,比如他不支持uodate操作(數據寫成後不可修改),不支持ACID等.
Apache ORC
ORC(optimizedRC File) 存儲源自RC(RecordCloimnar File)這種存儲格式,RC是一種列式存儲引擎,對schema演化(修改schema需要重新生成數據)支持較差,主要是在壓縮編碼,查詢性能方麵做了優化.RC/ORC最初是在Hive中得到使用,最後發展勢頭不錯,獨立成一個單獨的項目.Hive1.xbanbendu版本對事物和update操作的支持,便是給予ORC實現的(其他存儲格式暫不支持).
OCR發展到今天,已經具備一些非常高級的feature,比如支持update操作,支持ACID,支持struct,array複雜類型.你可以使用複雜類型構建一個類似parquet的嵌套式數據架構,但層數非常多時,寫起來非常麻煩和複雜,而parquet提供的schema表達方式更容易表示出多級嵌套的數據類型.
最後更新:2017-10-25 22:04:02