Java におけるデータ圧縮とそのライブラリ事情について #jjug_ccc 2018 Spring でお話しました
いまの仕事とはまったく関係ない内容で JJUG CCC 2018 Spring でお話してきました。
発表資料
※ 発表で使用したスライドより、本質的ではないスライドは省いています。
振り返り
CfP を投げるときに何を血迷ったか 20 分枠で応募してしまったがために、時間的な制約によって深い・細かい話は一切できずに代表的な圧縮アルゴリズムのざっくり説明とその Java 向けライブラリの紹介、そしてちょっとした比較に終始してしまいました。これでは、発表タイトルにある「極める」とは程遠い内容だな… と反省するばかりです。
なお、Java そのものからはちょっとずれた「データ圧縮」というテーマ設定での発表ではありましたが、ご回答いただいたアンケートで
- もう少しロジックに踏み込んだ話が聞きたかった。
という声があったり、Twitter 上でも
こういうの好き。20分しかなかったので圧縮の「比較」に注力したのだと思うんだけど、45分あれば少し踏み込んでアルゴリズムの違いとかも話してくれそうな感じがする。 :
— Shin Tanimoto🦊🤘 (@cero_t) 2018年5月27日
Java のデータ圧縮ライブラリを極める #jjug_ccc #ccc_c7 https://t.co/3E94WZJcgr
というコメントを頂いたりとアルゴリズムの方に興味を持っている方が少なからずいらっしゃるようなので、後日にはなるけどもうちょっと詳しい内容を何回かに分けてブログエントリを書こうかな… と思ってます。
そのほかアンケートで寄せられたコメントを取り上げます。
- 自分で調べると時間かかってしまう分野なので、シンプルにまとまっていて、良かったです。聞きにくいこともありませんでした。java ならではのマルチスレッド(マルチコアの有効活用)という点での踏み込みがあるとさらに良かったと思います(どれもあまり変わらないのでしょうか。。。)
こちらですが、今回の発表で紹介した圧縮ライブラリについてはいずれもシングルスレッドでのみの圧縮 / 復元の処理となります (マルチスレッド処理はいずれもサポートしていません)。そのため、一つの巨大なファイルを圧縮 / 復元するようなケースではマルチコアの有効活用は難しいと言えるでしょう。1
一方で、それなりの大きさのファイルが大量にあるようなケースであれば、それぞれの処理をスレッドプールなどを用意して同時並列で行うことで、マルチコアを有効活用した処理はわりと容易に実現できると考えています。
あとどうでもいいことなんですが、「Java な人たちにはこのスライドややウケするかな?」と思って仕込んだ某ネタスライドが思いのほか好評 (?) で笑いどころか拍手が沸き起こったのはいい思い出になりました。
あわせて読みたいブログエントリ
今回の JJUG CCC に関する、会社および同僚のブログエントリです。あわせてご覧ください。