1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DB・全文検索エンジンのデータ同期のススメ

1
Posted at

こんにちは。
Web・iOSエンジニアの三浦です。

今回は、DBと全文検索エンジン間でデータを同期する方法について紹介していきます。

はじめに

今日、データ・ログ分析や、文字通り検索機能を実現するため、SolrやElasticsearchなどの全文検索エンジンが使われることは珍しくありません。

その際、特にデータ分析や検索機能を実現するときは、全文検索エンジンのみにデータが入っているのではなく、DBなどにデータが入っており、それと同期する形で全文検索エンジンにデータを入れることも多いのではないでしょうか。

そうしたとき、現状ではDBと全文検索エンジン間でデータを同期する方法にデファクトスタンダートなどがあまりないように感じます。

そこで今回は、DBと全文検索エンジン間でデータを同期する方法を複数紹介し、適切な選択ができる手助けができればと思っています。

方法

1. バッチ

概要

PHPやPythonなど、好きな言語で書いたプログラムとサーバのcronなどを組み合わせ、定期的にDBと全文検索エンジン間でデータを同期する方法です。

利点

  • すでに慣れている言語を使えるため、学習コストが低いです。
  • 柔軟性が高く、好きに処理を書くことができます。
  • 実装方法や言語にもよりますが、メモリ使用量は比較的少なくなります。

欠点

  • 実装方法や言語にもよりますが、膨大なデータには対応しづらく、スケールしにくいことが多いです。
  • cronでの実行の場合、完全なリアルタイムの実現は厳しいでしょう。
  • 基本的にクラウドのマネージドサービスはありません。
  • 柔軟性が高い一方で、細かいハンドリングまで自分で行う必要があります。

使い所

  • 比較的データ量が少ないとき
  • 使用可能なメモリが少ないとき
  • 開発期間が短いとき

2. Logstash

概要

全文検索エンジンの一つであるElasticsearchの開発元であるElastic社が開発している、パイプラインアプリケーションです。

利点

  • Javaで構築されていて、比較的動作が高速です。
  • Elasticsearchの開発元が開発しているため、Elasticsearchとの親和性が高いです。
  • 失敗したときのリトライ処理や最後に取得したデータの保持など、便利な機能がデフォルトで備わっています。

欠点

  • 学習コストが高いです。
  • Javaで構築されているため、メモリをそれなりに使用します。
  • マネージドサービスがほぼないなど、あまり利用されている場所が多くありません。

使い所

  • ある程度のデータがあるとき
  • Elasticsearchとの同期処理

Apache Spark

概要

大規模データを分散処理できる、分散処理基盤です。
ビッグデータの解析などにも利用されます。

利点

  • 分散処理ができ、非常に高速です。
  • hadoopの枯れた技術を使用できます。
  • AWSのglue、EMRで使われるなど、主要な技術と言えます。
  • 今後ますます重要になると考えられるビッグデータの処理など、大規模データ処理に応用できます。

欠点

  • 学習コストが高いです。
  • かなりメモリを使います。

使い所

  • データ量が非常に多いとき

サーバーレス

概要

AWSにおけるglueやfirehoseなど、自前でサーバーを用意せずに使用できるアプリケーションです。

利点

  • 簡単な処理であれば、生のアプリケーションを使うよりも面倒事が少ないです。
  • マネージングされているため、管理コストが少ないです。
  • 機能が提供されていれば、リアルタイム処理が簡単にできます。
  • 同じクラウド内のサービスと連携がしやすいです。

欠点

  • 複雑な処理をしようとすると柔軟性が低くなります。
  • 複雑な処理をしようとすると学習コストが高くなります。
  • 使った分だけスケールするので、コストの見積もりが難しくなります。

使い所

  • データの整形処理などが簡単なとき
  • 同クラウド内のサービス間の連携

さいごに

どんなデータをどのように同期するかはもちろん、使用できる環境や開発期間によっても使うべきツールが異なることがわかりました。

ここに上げた以外にも、例えばDB自体にinsertやupdateが走ったときに動くhookをつけ、それをもとに処理させるなどの方法もありますが、自分の開発内容によって適切に変えていきたいところです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?