データベースによる並列処理 情報論理工学研究室 04147175 三宅健太
本研究の背景 × × 原因 3. データのサイズが大きすぎる。 1. SQL文の文法 2. インデックスの張り方 膨大な量からなるデータ データベース 検索 応答 ユーザ 1つの応答時間が、 非常に大きなもの となってしまうこと がある。 原因 2. インデックスの張り方 1. SQL文の文法 × × 3. データのサイズが大きすぎる。 最大の原因!!
データベースとの連携に優れたプログラムの表記法 解決策 パラレルクエリ あらかじめデータを細分化し、手分けして処理する。 テーブル パラレルクエリ 逐次クエリ データを順番に処理していく データを分割し、結果をまとめる。 クエリ 結果 目的 分割されたテーブルにデータを挿入し、処理速度の向上の目指す。 データベースとの連携に優れたプログラムの表記法 PHP データベース 計算機 挿入 取り出す 出力
データベース環境の構築 準備 Windowsの標準環境には、DBは付属していない。 必要なソフトウェアをインストールしなければならない。 XAMPP MySQL TeraPad Apache データベース テキストエディタ
MySQLによる逐次クエリ & パラレルコードによるパラレルクエリ 研究内容 MySQLによる逐次クエリ & パラレルコードによるパラレルクエリ 双方のクエリを実行し、それぞれ処理時間を測定する。 それぞれの結果を検証し、双方の結果を比較する。 検証手順 [1]データの分割・挿入 [2]MySQLによる各テーブルへのクエリ処理 [3]パラレルコードによる各テーブルへのクエリ [4]結果をまとめる
[1]データの分割・挿入 例 文字列 文字列 例 文字列 各クエリごとにレコード数が均等になるように2~10個のデータに分割・挿入する。入力データは、文字列(a~z)をシャッフルしたもの。 例 分割なし 2分割 150万レコード T1 挿入 挿入 文字列 T0 文字列 T2 300万レコード 150万レコード 各テーブルを(T1-----Ti(2<=i<=10)) とし、テーブル全体をマージして比較用のテーブルT0を作成する。 例 2分割 MySQL MySQL T1 挿入 マージ結合 T0 文字列 T2
[2]MySQLによる各テーブルへのクエリ処理 各テーブルに入力された文字列(a~z)から、”sql”と配列された文字列を含む行を出力すると命令し、その処理速度を測定する。 例 分割なし 2分割 MySQL MySQL 逐次テーブル マージテーブル T0 T0 クエリ 結果表示 クエリ 結果表示 [3]パラレルコードによる各テーブルへのクエリ 各テーブルにパラレルコードを使用して、”sql”と配列された文字列を含む行を出力すると命令し、その処理速度を測定する。 例 分割なし 2分割 MySQL MySQL T1 T0 クエリ 結果 クエリ 結果 T2
出力された結果を作成した一時ファイルに追記し、処理速度の測定の結果を表示する。 例 分割なし 2分割 T0 T1.T2 追記 追記 出力 追記 集計 一時テーブル 一時テーブル 結果 結果表示 結果 結果表示 [4]結果をまとめる 各テーブルの処理がすべて完了しているかをチェックし、 MySQLによる逐次クエリの結果を、各分割ごとに比較 パラレルコードによるパラレルクエリの結果を、各分割ごとに比較 双方のクエリの結果を検証し、比較
MySQLによる逐次クエリ & パラレルコードによるパラレルクエリ 結果 MySQLによる逐次クエリ & パラレルコードによるパラレルクエリ
まとめ 今後の課題 1台の計算機を用いての処理であるため、並列処理可能な処理数に限界が見られた。 マルチプルINSERTによる方法 双方のクエリは、共に各テーブルを分割化することにより、処理速度が向上することが示された。 逐次クエリよりもパラレルクエリのほうが、より高いパフォーマンスが得られる。 1台の計算機を用いての処理であるため、並列処理可能な処理数に限界が見られた。 今後の課題 マルチプルINSERTによる方法 データ挿入部分を自動化し、ユーザがデータベースを使用する手間を省く