膨大な量のデータ (1 日あたり約 200,000 txns) を保存する必要があるアプリケーションがあり、各レコードのサイズは約 100 kb から 200 kb です。データの形式は JSON/XML になります。
アプリケーションは高可用性である必要があるため、S3 または AWS DynamoDB にデータを保存する予定です。
いくつかの属性 (日付範囲、ステータスなど) に基づいてデータを検索する必要がある場合があります。ほとんどの検索はいくつかの一般的な属性に対して行われますが、特定の運用ユース ケースでは任意のクエリが含まれる場合があります。
非リレーショナル データを検索する方法を調査したところ、これまでのところ、ほとんどのテクノロジで使用されている 2 つの方法が見つかりました。1) インデックスを構築する (Solr/CloudSearch など) 2) Map Reduce ジョブを実行する (Hive/Hbase など)
私たちの要件は、検索結果が信頼できるものであることです (S3/DB のデータと一致している - オラクル クエリのようなものです。遅くても問題ありませんが、データを取得するときに、クエリに一致するすべてのものを返すか、少なくとも許可する必要があります)。一部の結果がスキップされたことはわかっています)
最初は、インデックス ベースのアプローチが MR よりも高速であるように見えます。しかし、それが信頼できるかどうかはわかりません-インデックスが古くなっている可能性がありますか? (検索を行ったときにインデックスが古かったことを確認して修正できるようにする方法はありますか? インデックスを DB/S3 の値と常に一致させる方法はありますか? Oracle DB のインデックスに似たもの)。MR ジョブは常に信頼できるようです (クエリごとに S3 からデータをフェッチするため)、その仮定は正しいですか? とにかくこのクエリを高速化する方法はありますか? S3 のパーティション データであり、各パーティションに基づいて複数の MR ジョブを実行できますか?