おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

Shared Dictionary Compression Over HTTP (SDCH)について

CloudFrontでの圧縮転送まわりでこのドキュメントを読んでいたら、

CloudFront can only serve compressed data if the viewer (for example, a web browser or media player) requests compressed content by including Accept-Encoding: gzip in the request header. The content must be compressed using gzip; other compression algorithms are not supported. If the request header includes additional content encodings, for example, deflate or sdch, CloudFront removes them before forwarding the request to the origin server.

と書いてあって、"sdch" とは何?と思って調べ始めた次第。いやまぁ、書いてあるとおり、CloudFrontではgzip以外の圧縮アルゴリズムに対応していないんだけどさ。

なぜ気になったのかというと、似たような小さなデータがたくさんあるようなケースをどのように扱うとストレージや転送量を削減できるかということを考える機会があり、これって、固めてzipにすれば効率よく圧縮できるんだけれども、個別のものについてはそんなに効率よく圧縮できないという問題がある。それって、圧縮用の辞書が別にあればいいんじゃね?ということで、そういう実装のSDCHに興味を持った次第。

以下、調べたメモをdump。 使える場所が限られそうで、さらに使う場合にはコツが必要そうな感じ。流行らなかったのがわかる気がします。

SDCHとは

"Shared Dictionary Compression Over HTTP" という名前のとおり、共有辞書でのデータ圧縮を行う仕組み。ヘッダで辞書の場所とかやりとりして、共有辞書で圧縮・展開を行う。 GoogleO'Reillyのvelocityカンファレンスで2008年に提案していて、Google Chromeに実装されているらしい。

Shared Dictionary Compression over HTTP (SDCH) is a data compression method aimed to reduce redundancy across HTTP responses.[1] This method is proposed by Google and implemented in their Google Chrome web browser. This is a proposed modification to HTTP/1.1. SDCH is using VCDIFF (RFC 3284) for the compression. Shared Dictionary Compression Over HTTP - Wikipedia, the free encyclopedia

VCDIFF

SDCHはVCDIFF (RFC 3284)を圧縮に利用している。

VCDIFF (ブイシーディフ) は差分符号化のフォーマットとアルゴリズムであり、RFC 3284 で規定されている。アルゴリズムは1999年に書かれた Jon Bentley と Douglas McIlroy の論文に基づく。VCDIFF は "Delta encoding in HTTP" (RFC 3229) の中でも差分符号化アルゴリズムの一つとして使われていて、Google の SDCH (Shared Dictionary Compression Over HTTP) でも使われている。 VCDIFF - Wikipedia

open-vcdiffがオープンソースで公開されていて、SDCHの実装でもこれが使われているらしい。

xdelta

vcdiffの実装としては、xdeltaもある。

参考