富士通研究所は2017年3月17日、NoSQLデータベース「MongoDB」のデータを読み出し、RDB(リレーショナルデータベース)「PostgreSQL」の表に変換する技術を発表する。MongoDBはIoT(インターネット・オブ・シングズ)機器などがデータの送受信に使うJSON形式でデータを保存するドキュメント指向のNoSQLデータベース。IoT機器から収集したデータを加工せずにMongoDBに保存し、SQLクエリーを使って読み出せる。

コンピュータシステム研究所の堀江健志所長(右)、同研究所データシステムプロジェクトの河場基行プロジェクトディレクタ(中央)、同研究所同プロジェクトの中村実氏(左)
コンピュータシステム研究所の堀江健志所長(右)、同研究所データシステムプロジェクトの河場基行プロジェクトディレクタ(中央)、同研究所同プロジェクトの中村実氏(左)
[画像のクリックで拡大表示]

 この技術を使うと、SQLクエリーでPostgreSQLとMongoDBの両方のデータを操作できる。コンピュータシステム研究所データシステムプロジェクトの中村実氏は「MongoDBに保存してあるデータが、PostgreSQLの中に保存されているかのように扱える」と話す。

 SQLクエリーでMongoDBのデータを読み出す手法は、オープンソースソフトウエア(OSS)「mongo_fdw」を使うことで富士通研究所が新技術を開発する前から実現できた。mongo_fdwはMongoDBのデータ形式からRDBの表形式への「データ変換やPostgreSQLとMongoDB間の通信がオーバーヘッドになり、処理が遅かった」(コンピュータシステム研究所データシステムプロジェクトの河場基行プロジェクトディレクタ)という。SQLクエリーを実行してからデータが出力されるまでの時間のうち、8割以上がデータ変換と通信に費やされていた。

 富士通研究所はSQLクエリーを基にMongoDBのデータ操作コマンドを作るアルゴリズムを見直し、インメモリー型の分散処理ソフト「Apache Spark」を使って複数ノードでデータベースを操作して、トータルのデータ読み出しを高速化した。開発した技術は、2017年度上期(2017年4~10月)中に富士通から商用ソフトとして提供する計画だ。

 富士通研究所が開発したアルゴリズムは、あらかじめSQLクエリーの全文を解析してMongoDBのデータ操作コマンドと、読み出すデータのデータ形式やデータ型を定義した仮想的な表を作る。あらかじめ表を用意してからMongoDBのデータを読み出すことで、MongoDBのデータ型からRDBの表へ変換する処理が高速化できる。

 mongo_fdwはSQLクエリーを順番に読み込んでMongoDBのデータ操作コマンドを作り実行し、全てのデータをPostgreSQLに読み込んでから表に変換する。MongoDBのデータ操作コマンドはMongoDBから読み出すデータ数と同じ回数だけ実行し、コマンドを実行するたびにPostgreSQL上で表に変換していたため、時間がかかった。

 富士通研究所が開発した技術を使うことで、mongo_fdwを使った場合に比べてSQLクエリーを実行してからデータを出力するまでの処理を約4.5倍高速化ができるという。

 合わせて、富士通研究所はMongoDBとPostgreSQLのデータを複数のノード上に配置し、Apache Sparkを使って処理した時の処理時間を見積もる技術を開発。MongoDBとPostgreSQLに割り振るノード数を調整することで、データ読み出しを高速化した。

 分析を想定したデータベースのベンチマークテスト「TPC-H」では、4ノードを使ったデータ読み出し速度は1ノードに比べて約3.4倍、mongo_fdwを使った場合に比べて約16倍高速になった。