問題タブ [saved-searches]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 保存済み検索シナリオの実装方法
保存された検索とは何ですか?
保存は、ユーザーが高度な検索で目的の結果を見つけられず、[マイ検索基準の下部を保存] を押すだけのメカニズムです。検索基準を保存し、対応するデータが Web サイトに投稿されると、ユーザーに「ユーザー、アイテム( s) あなたが探していた存在が今ここに来て、それを訪れてください」.
保存された検索は、複雑な検索オプションを持つサイト、またはユーザーが検索結果の動的なセットを再訪問または共有したいサイトに役立ちます。
高度な検索があり、新しい検索を実装する必要はありません。必要なのは、保存された検索メカニズムを実現するための優れたパフォーマンス シナリオです。
ユーザーが 1 日あたり約 120,000 の投稿を Web サイトに投稿する Web サイトがあり、SAVED SEARCH シナリオ ( https://www.gumtree.com/のようなもの) を実装しようとしています。これは、高度な検索を使用しているユーザーを意味しますが、目的のコンテンツが見つからず、検索条件を保存したいだけで、ウェブサイトに結果がある場合は通知でお知らせします。
ウェブサイトでは Elastic search と Mysql を使用しています。私たちはまだ何も実装しておらず、高レートの日付を処理できる良い解決策を見つけるためにそれについて考えているだけです.**問題は作業の規模です.1日に多くの投稿があり、ユーザーはこの機能を頻繁に使用していると思われるため、この規模の作業を簡単に高パフォーマンスで処理できる適切なシナリオを探しています。
提案された解決策ですが、最善ではありません
簡単な解決策の 1 つは、保存された検索を Elastic のsaved-search-index に保存してから、すべての保存された検索項目について posts-index-Elastic から結果を取得する cron ジョブを実行し、結果があれば RabbitMq にレコードをプッシュして、同等のユーザーに通知します。
ユーザーがウェブサイトにアイテムを投稿すると、Elastic のsaved-search-index に存在するsaved-searches でアイテムをチェックし、一致する場合はRabbitMq にレコードを入れます(この方法の主な問題は、巨大なウェブサイトに挿入されたすべての投稿の保存された検索の数)。
私の大きな関心事は規模とパフォーマンスです。この問題についての経験とアイデアを私と共有していただければ幸いです。
スケールについての私の見積もり
- 保存済み検索の有効期限は 3 か月です
- 1 日あたり少なくとも 200,000 件の保存済み検索
- つまり、9,000,000 のアクティブなレコードがあります。
あなたが私とあなたの心を共有してくれれば、私は感謝します
*参考までに** - キュー ジョブ用に RabbitMQ もあります - ES サーバーは 64GB RAM で十分です