View on GitHub

Today I Learned

Software Engineering Blog

A. Serialization And Compression Technical Details

シリアライズと圧縮技術。

A.1 Serialization Formats

シリアライズのアルゴリズムやフォーマットはたくさんあり、性能を大幅に向上させることができる。

A.1.1 Row-Based Serialization

行ベースのシリアライズ。

Type Description
CSV 性能が低くエラーの原因になるので、パイプラインでの利用は避けるべき。
XML シリアライズ、デシリアライズは低速。プレインテキストによるオブジェクトシリアライズはJSONに置き換えられている。
JSON, JSONL データ交換や保存オーマットとして広く使われている。カラム型の方が性能が良いので、パイプラインステージ間やデータ提供では別の方法を検討したほうがいい。
Avro データをバイナリフォーマットにエンコードする。Hadoopエコシステムや様々なクラウドデータツールで利用されている

A.1.2 Columnar Serialization

カラム型シリアライズ。

すべての行を一度に読み込むのではなく、一部のフィールドだけを読むので、クエリスキャンのデータ量を大幅に削減できる。

データを列で格納すると、同じような値が隣り合うことになるので、ストレージは効率的に圧縮できる。

個々のデータレコードに簡単にアクセスできず、トランザクションワークロードには適さない。

Type Description
Parquet エンコードされたデータにスキーマが組み込まれている。ネストデータのサポート。ポータビリティが高い。様々な圧縮アルゴリズムと組み合わせることができる。
ORC Apache Hiveでよく使われていたが、近代的なクラウドエコシステムでのツールではあまりサポートされておらず、Parquetのほうが人気が高い。
Apache Arrow or In-memory serialize インメモリ処理と外部のへのエクスポートに適したバイナリデータフォーマットを用いるので、シリアライズとデシリアライズのオーバーヘッドを避けることができる。言語によってデータをシリアライズする方法が異なる。現在急速に普及している。

A.1.3 Hybrid Serialization

ハイブリッドシリアライズは、複数のシリアライズ技術を組み合わせたり、シリアライズを他の抽象レイヤと統合したりするテクノロジー。Hudi (Hadoop Update Delete Incremental) 、Icebergなど。

A.2 Database Storage Engines

データベースにはその下位にストレージエンジンが存在する。

ストレージエンジンは、シリアライズ、データの物理配置、インデックスなど、データのディスク上での格納方法すべてを管理する。

A.3 Compression: gzip, bzip2, Snappy, Etc.

アナリティクスのためにシリアライズする際には、完全に元データに忠実であることが必要なので、非可逆圧縮ではなく可逆圧縮を用いる。

gzip2やbzdip2などの伝統的な圧縮エンジンは、テキストデータの圧縮に非常に有効。

Snappy, Zstandard, LZFSE, LZ4などの新世代の圧縮アルゴリズムは、圧縮率より速度とCPU効率を優先する。データレイクやカラム型データベースなどでよく利用される