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効率を優先する。データレイクやカラム型データベースなどでよく利用される