ElasticsearchでSQLデータベースに検索・可視化機能を追加する方法

NoSQLデータストアが注目を集める昨今ですが、リレーショナルデータベースやSQLベースのデータベースは今なお現役で活躍しています。実際、私たちが関わるほぼすべてのお客様の環境では、MongoDB、Redis、Elasticsearchなどと並んで、MySQL、PostgreSQL、MS SQL Serverが利用されています。リレーショナルデータベースから別のデータストアへデータを複製する最も簡単な方法についてのご相談は少なくありません。システム移行のための場合もあれば、全文検索や可視化といった機能を既存のリレーショナルデータに追加したいというケースもあります。幸い、Elasticsearchを使えば、この課題は非常に簡単に解決できます。
最近、リレーショナルデータベースとElasticsearchを接続する際の手順と意思決定のポイントを詳しくまとめたホワイトペーパー「Connecting Relational Databases to Elasticsearch」を作成しました。本記事では、その概要を手軽にご紹介します。
適切なツールセットの選択
Web上には数多くの移行・レプリケーションツールが公開されており、自前でコードを書くこともそれほど難しくはありません。しかし、これまでの経験から言えるのは、LogstashとJDBC入力プラグインの組み合わせが最良のソリューションだということです。
Logstashは、データの取り込み、変換、送信をこなす、まさにスイスアーミーナイフのような万能ツールです。さらに、Elastic Stackの一部であるため、Elasticsearchへのデータ送信能力は他の追随を許しません。これでElasticsearchへの送信は解決しましたが、リレーショナルデータベースからデータを取得するにはどうすればよいのでしょうか。
Logstashが提供する多くの入力プラグインの中に、JDBC入力があります。JDBCとは、Javaアプリケーションがデータベースへアクセスする方法を定義した標準規格です。対象のデータベース向けにJDBC準拠ドライバーが用意されていれば、LogstashのJDBC入力は標準的なSQLクエリを使ってデータを抽出できます。主要なリレーショナルデータベースの多くで無料のJDBCドライバーが提供されており、一部の非リレーショナルデータベースにも対応しているため、他のデータベースとElasticsearchをつなぐ手軽な道筋となるのです。

接続の設定
JDBC準拠のデータベースと互換性のあるドライバーさえ用意できれば、あとはLogstashに以下の情報を設定するだけで接続が完了します。
- JDBCの構成情報
- リレーショナルデータベースの認証情報と接続情報
- 必要なデータを抽出するためのSQLクエリまたはステートメント
- Elasticsearchの認証情報と接続情報
これらの情報が揃えば、Elasticsearchへのデータ投入は驚くほど簡単です。
考慮すべき重要なポイント
リレーショナルデータをElasticsearchへレプリケートまたは移行する場合、データをA地点からB地点へ運ぶことは全体の半分にすぎません。より重要な課題は、Elasticsearch上でそのデータをどのようにモデル化するかという点です。Elasticsearchにおけるリレーショナルデータの問題は、端的に言えば「リレーション(関係)」そのものにあります。
Elasticsearchは何よりもまず検索エンジンであり、そのデータモデルは本質的にドキュメントストアです。ドキュメント間のリレーションに対するサポートは最小限にとどまるため、データのモデル化方針についていくつかの決断を下す必要があります。
一般的に提示される3つの標準的な選択肢は次のとおりです。
- データの非正規化: テーブル間のリレーションをすべて取り除き、データの組み合わせごとに一意のドキュメントを作成する方法です。
- ドキュメント内の配列: Elasticsearchは各ドキュメント内にオブジェクトの配列を持てるほか、特殊な「nested」型を提供しており、一部のクエリでは配列の各要素を独立したドキュメントとして評価できます。
- 親子関係(Parent-Child): 真のリレーショナルデータベースに最も近いのがこの方式で、特定のドキュメントが別のドキュメントの子であることを指定できます。
Elasticsearchにはデータを扱うための選択肢が複数用意されていますが、どの方法が最適かは、ユースケースや要件次第です。
もう一つの重要な決定点は、どれだけのデータを、どの頻度でElasticsearchへ複製するかです。移行が目的であれば答えはシンプルで、全データの一括ダンプを行えばよいだけです。一方、Elasticsearchをセカンダリのレポーティング用データストアとして活用したい場合は、コピーするデータ量や実行タイミングについて柔軟な選択が可能です。定期的なスケジュールでフルスナップショットをコピーすることもできますし、LogstashのJDBC入力フィルターの機能を利用して特定のカラムで絞り込み、新規データが発生した時点のみ送信することもできます。どの方式を選ぶかは、データの特性と用途によって判断しましょう。
意思決定と詳細情報
結論として、データストア同士を接続するためのツールとプロセスは今すぐ利用可能であり、実際の導入もかなり容易です。ただし、Elasticsearchでのデータモデル設計、クエリの実行方法、可視化の手法については、いくつかのトレードオフが存在します。たとえば、リレーショナルデータを非正規化した場合、生成されるデータセットのサイズ、集計処理の実行方法、利用できる可視化の種類などに影響が及びます。
こうしたプロセスと意思決定の流れを具体的に示すため、ホワイトペーパー「Connecting Relational Databases to Elasticsearch」を作成しました。サンプルデータセットを用いたリレーショナルDBからElasticsearchへのレプリケーションの標準的なセットアップ手順、各モデリング手法が結果のデータに与える影響、そして自社に最適な方法を選ぶためのガイドラインを詳しく解説しています。

ぜひご活用ください。詳細な情報が必要な場合は、sales@objectrocket.comまでお気軽にお問い合わせください。
-
FilebeatとElasticsearch Ingest PipelineによるCSVファイル解析の実践ガイド
Elasticsearch 5の最も注目すべき新機能のひとつがingest nodeです。この機能により、Logstashスタイルの処理をElasticsearchクラスター内で実現でき、別途サービスやインフラを用意することなく、データをインデックス化する前に変換処理を行えます。以前、LogstashでCSVファイルを解析する方法についての記事を公開しましたが、本記事では比較のため、そのingest pipeline版をご紹介します。ここでは、Filebeatを使ってデータをingest pipelineへ送信し、インデックス化したうえで、Kibanaで可視化するまでの一連の手順を解説します。
-
Google検索の人物カード(People Card)とは?作成・追加方法を徹底解説
現代において、広告やプロモーションは非常に重要です。ビジネスでもポートフォリオでも、強力なオンラインプレゼンスを持つことは、キャリアアップに大きく貢献します。Googleのおかげで、誰かがGoogleであなたの名前を検索したときに、あなたを見つけてもらいやすくなりました。そう、その通りです。自分の名前やビジネス名が検索結果に表示されるようになるのです。名前とともに、簡単な経歴、職業、SNSアカウントへのリンクなどの関連情報も、見やすいカード形式にまとめて表示できます。これが「People Card(人物カード)」と呼ばれるGoogleの新機能です。この記事では、この機能について詳しく解説し、G