1日あたり約400万件のレコードがあり、オンラインで7年間の価値を維持する必要があるため、検索できるようにする必要がある102億件のレコードを調べています。ユーザーは、検索がUIに十分な速さで、3〜5秒になることを期待しています
私の制御が及ばないため、既製のデータベースソリューションを使用することはできません。これは、データベースを別のチームに渡して管理する必要があるためです(質問しないでください)。つまり、ハードウェアを最適化する機能を失い、彼らはデータベースのための万能サービスを提供し、GBによって(内部で)課金されるソフトウェア。私は私がポイントを作ることを示唆するコメントを受け取るつもりだと確信しています、私はすでに持っており、経営陣は彼らが私に何をするように求めているかはばかげています。
私はソリューションの要としてLuceneを使用することを検討してきました。タイプ別および日別にパーティション化された実際のデータをフラットファイルに保存します。次に、Luceneドキュメントを使用して、検索対象のいくつかのフィールドにインデックスを付けます。唯一の「Stored」フィールドはレコードのIDです(そのため、フラットファイルから読み取ることができます)。
私は正確にLuceneまたはハードドライブにこだわっていませんが、私の理解によれば、インデックスを検索するための最初のIO /シーク時間があります。その後、すべてのLuceneドキュメントIDがあるとき、さらにIOが発生するドキュメントを読みます/ seeking時間、それから私はフラットフラットから実際のレコードを読みます...データセットのサイズを考えると、これは非常に速くなるとは想像できませんが、これは少し心配ですか?
Luceneの最大ドキュメントサイズはインデックスあたり21億です。そのため、ここでは複数のインデックスが必要になります。
このアプローチは、一見すると、うまくいくように見えますか?
保存しているデータはイベントアクションデータです。ほとんどのクエリは、イベントIDでグループ化し、特定のイベントの最後のイベントアクションの詳細を取得します。一部のクエリは、大規模なセットイベントとそれらの個々のイベントアクションを分析します。