のは、私はこれらのテーブル/モデルを持っているとしましょう:ユーザーのウィッシュリストにある製品の価格低下を追跡する方法?
Product
- id
- last_updated_date
- name
- price
User
- id
- name
WishlistItem
- id
- user_id
- product_id
Productテーブルには、数百万の記録を持っており、(古いものをドロップする、新しいテーブルに挿入する)データのインポートを経由して、毎晩自動的に更新されています。私は基本的にそのテーブル/モデルへの読み取り専用アクセスを持っています。
ユーザーのウィッシュリストに商品があり、価格が下がった場合、そのユーザーに通知することができます。どのような方法でこれを行うことができますか?
私はアイデアのカップルを持っている:
は、ウィッシュリストモデルにProduct.last_updated_dateを追跡し、定期的にそれが更新されているかどうかを確認するために、製品のテーブルをポーリングします。これは、恐ろしい/非スケーラブルなソリューションのように思えます。
Productテーブルが更新されたときにトリガーするPostgres ViewまたはFunctionの種類ですか?私はpostgresを初めて使っているので、これが可能かどうかはまだ分かりません。あなたは私が右方向に任意のヘルプは大歓迎です:)
考えていないことを示唆することは驚くべき
何か!
UPDATE:ウィッシュリストエントリ自体の内部で現在の価格をキャッシュして来た ひとつのアイデア、すなわち:
WishlistItem
- id
- user_id
- product_id
- price
...その後、インポートした後、私は比較できWishlistItem.price Product.priceを使用して通知します。これはうまくいくものですが、このアプローチでは、すべてのユーザーのすべてのWishlistItemに基本的に価格データのキャッシュされたコピーが保存され、更新があればすべてのリストを新しい価格で更新する必要があるため、私はそれのまわりに道があるとは思わない。
UPDATE: 最後に、私は、私は、更新トリガに標準使用できるように、私はおそらくちょうどデータのすべてのバージョンを追跡しなければならないことを決めました。これにより、すべての価格変更の記録を持つことができ、価格動向などを追跡できます。
あなたのアップデートは、下の私の提案、非正規化価格に沿っています。あなたの製品テーブルを交換するので、他のテーブルであなたのオリジナル価格を記録する必要があります。通知は、あなたが言うように、ウィッシュリストテーブルを更新することによってマークする必要があります。また、通知テーブルを持ち、ユーザー/製品ごとに1つの通知しか許可しないなどの解決策があります(ウィッシュリストのIDを追加して、 。 – Teson