webdevqa.jp.net

ElasticSearchは、書き込み損失、データ可用性などの要因に対するプライマリデータストアとしての信頼性

私は、ユーザーがさまざまな種類のグループ化、フィルタリング、さまざまなフィールドのドリルダウンを実行できる汎用ダッシュボードを作成する必要があるプロジェクトに取り組んでいます。このために、データのスライスとダイスを許可する検索ストアを探しています。

データのソースは複数あり、検索ストアに保存されます。中間コンポーネントによって実行できるソースデータに対して事前計算が必要な場合があります。

ESをプライマリデータストアとしても確実に使用できるかどうかを理解するために、いくつかのブログを調べました。それは主に私たちが探しているユースケースに依存します。私たちが持っているユースケースに関する情報の一部:

  • 毎年1〜2 KBで約3億件のレコード。
  • 1年間のデータを保存すると仮定すると、現在は300 GBですが、データの増加を考慮すると、ユースケースは最大400〜500 GBに達する可能性があります。
  • 現在のところ、どのようにデータをプッシュするかはわかりませんが、おおまかに言って、5分あたり最大で200〜300万レコードに達する可能性があります。
  • 検索リクエストは少ないですが、過去6週間から6か月のデータを検索できる複雑なクエリが必要です。
  • ドキュメントは、ドキュメント内のほとんどすべてのフィールドでインデックス付けされます。

一部のブログでは、プライマリデータストアとして使用するのに十分な信頼性があると述べています-

また、一部のブログでは、ESにはほとんど制限がないと述べています-

PostgreSQL、DynamoDB、RDSなどのプライマリストレージを持たずに、Elastic Searchをデータの唯一の真実として使用した人はいますか? ESには、データ損失に問題がある可能性があるスプリットブレインやインデックス破損などの特定の問題があることを調べました。だから、私は誰かがESを使用していて、データに問題があるかどうかを知りたいと思っています

ありがとう。

61
Harshit Agrawal

簡単な答え:ユースケースによって異なりますが、おそらくプライマリストアとして使用したくないでしょう

より長い回答:復元力とデータ損失に関連して発生する可能性のある問題をすべて理解する必要があります。 Elasticには、いくつかの これらの問題に関する優れたドキュメント があり、これをプライマリデータストアとして使用する前に本当に理解する必要があります。さらに、 トピックに関するAphyrの投稿 は優れたリソースです。

あなたが取っているリスクを理解し、それらのリスクが許容可能であると信じている場合(例えば、小さなデータの損失はアプリケーションにとって問題ではないため)、先に進んで試してみてください。

32
Cory

一般に、冗長データストレージソリューションを設計することをお勧めします。たとえば、最初にすべてをフラットデータとしてs3のような静的ストレージにプッシュし、そこからESプルおよびインデックスデータを取得する、高速で信頼性の高いアプローチです。何らかのORMを活用する柔軟性が必要な場合は、間にRDSまたはRedshiftレイヤーを配置できます。これにより、ESでデータを常に再構築できます。

冗長性と柔軟性/パフォーマンスのバランスをどのように設定するかは、ニーズと要件によって異なります。大量のデータが含まれる場合、生データを静的に保存し、ESによってその一部にインデックスを付けることができます。

Amazon Lambda は素晴らしい機能を提供します:

多くの開発者は、Amazon DynamoDBを使用してオブジェクトメタデータを保存およびインデックス付けし、高速検索を可能にしながら、オブジェクトをAmazon S3に保存します。 AWS Lambdaは、オブジェクトがAmazon S3から追加または更新されるたびにAmazon DynamoDBのインデックスを自動的に更新する関数を実行することにより、すべての同期を簡単に維持します。

7
marekful