この記事の趣旨
2017年に出版されたリモートDBMSとクライアント間の大量データ転送を最適化する 手法を提案する論文を読みました。
Don’t Hold My Data Hostage – A Case For Client Protocol Redesign
著者について
Mark Raasveldt、Hannes Muhleisenらのグループによる論文。 いずれもCentrum Wiskunde & Informaticaの所属で、DuckDBのCxO。 DBMSと分析システムにおけるパフォーマンス最適化を研究している。
問題意識
DBMSからクライアントプログラムに大量のデータを転送することは一般的なタスクである。 例えばRやPythonなどを用いた分析システムはしばしばデータベース・インターフェースを利用してデータの取得 を行なっている。
一方でネットワーク越しにデータを転送することはレイテンシを増加させ、転送時間を長引かせる要因である。 そのため分析用途で大量のデータ転送を避け、一部のデータをサンプルとして利用するに止まることが多い。 このアプローチはパフォーマンスの低下を押さえられるものの、分析や機械学習の精度を下げることに繋がる。
とくに既存のクライアントではネットワークによるレイテンシとスループットの制限に大きな影響を受けパフォーマンス を劣化させる。 この問題はデータベースが別マシンやクラウドで動作するときにより大きな問題となる。
手法
本論文では既存のシリアライズ手法と圧縮手法によるパフォーマンスへの影響を計測し、新しいプロトコルとして以下の特性を持つ 手法を提案している。 1. チャンク毎のデータ転送と(デ)シリアライゼーション 1. ヒューリスティックによる圧縮方法の決定 1. text/binaryによるカスタムシリアライゼーションを使用する 1. NULL終端によるテキストの取り扱い
実験結果
提案手法を実装したMonetDB(表内ではMonetDB++)とPostgreSQL(表内ではPostgreSQL++)を既存のDBMSやnetcatと比較することで 評価を行なっている。
TCP-Hのlineitem、American Community Survay、Airline On-Time Statisticsの3つのデータセットで評価を行なったところ、 ローカル通信における非圧縮netcatを除き殆どのケースでMonetDB++系が最良のパフォーマンスを発揮し 次点でPostgreSQL++系が優れた結果を残している。
PostgreSQLに比べMonetDBが優れている理由はPostgreSQLの行指向データを列指向に変換するコストのためである。
作業時間
- read
- 31:21
- 31:21
- author
- 35:38
- 4:17
- summary
- 70:13
- 34:35
感想
論文出版時にはTPC/IPプロトコルが前提でQuic登場前のため、ネットワークプロトコル自体は考慮されていない。 現在であればTPC/IPとQuicに適合した手法の比較が行なわれると思うので気になるところ。