1

クライアントビューまたはデータベースクエリで、いいね/アンいいねボタンを表示するためのロジックが保持される場所についてコンセンサスがあるかどうかを確認したかった. ロジックをクエリ自体にプッシュすると、クリーンで一貫性が保たれますが、投稿のホームページ リストのすべてのクエリをパーソナライズする必要があり、そのリクエストのキャッシュは許可されません。

セットアップ: MongoDb データベース (場合によっては neo4j)、node.js API とアプリケーション サーバー、iOS モバイル クライアントと Web サイト。ほとんどの投稿には 10 程度のいいねが付けられますが、数百のいいねが付けられる投稿もあります。ほとんどのユーザーは 50 ~ 300 件の投稿を気に入り、少数のユーザーは数千件の投稿を気に入っています。

私のユースケース: ユーザーが最近人気のある投稿のリストを閲覧すると、その投稿が既に気に入ったかどうかに基づいて、各投稿の横に「いいね」または「いいね!」ボタンが表示されます。

解決-

アプローチ 1: クエリでユーザー ID をデータベースに渡し、クエリで計算された isLiked プロパティを使用して最も人気のある投稿のリストを返します。

アプローチ 2: クライアント アプリはそのユーザーの高評価 ID をフェッチして同期を維持し、ビューは投稿の特定のリストに対して「いいね」ボタンまたは「いいね」ボタンを表示するかどうかを決定します。投稿のリストは、サーバーまたは cdn にキャッシュでき、パーソナライズは必要ありません。

アプローチ3?残りのAPIサービスレイヤーでそれを行うより効率的な方法はありますか?

4

1 に答える 1

0

メリットとデメリットを考慮して、どちらが良いかを検討する必要があると思います。

MongoDB は、非常に効率的な単原子インクリメント データベース コマンドをサポートしています。データベース層が挿入を確認するまで待つ必要はなく、増加した「いいね」の数を表示するだけです。

ほぼ同時に、別のユーザーが同じ記事を読んでいて、そのユーザーのカウントが正しいことを 100% 確実にしたい場合は、おそらくキャッシュを行いたくないでしょう。

とはいえ、誰かが投稿を「いいね」した後、ミリ秒単位で一貫して表示されるようにするために、おそらくその数を保持する必要はありません。したがって、カウントを含むデータベース情報をキャッシュし、x 分ごとにデータベースにアクセスできます。

ブログの投稿は、最初の数日間は非常に人気があり、その後は人気がなくなることに注意してください。

好奇心から、これは面白いと思うかもしれません: YouTube のビデオ カウント システムのビデオです。検証と複数のデータセンターの理由から、カウントはしばらくの間 301 のままです。 http://www.youtube.com/watch?v=oIkhgagvrjI

于 2012-11-12T15:49:17.687 に答える