1

ユーザーが投稿を作成し、他のユーザーがこれらの投稿にいいねとコメントできるアプリを作成しています。この機能を実現するために、POSTS、LIKES、COMMENTS などのテーブルを使用しています。 .

投稿には、postId、content、userWhoMadeThePost、dateOfPosting などのフィールドがあります。

LIKES には、id、postOnWhichLikeWasMade (POSTS(postId) への外部キー)、userWhoLiked、dateofLike として filelds が含まれます。

コメントには id、content、postOnWhichCommentWasMade (POSTS(postId) への外部キー)、userWhoCommented、dateOfComment があります。

最も人気のある投稿 (いいね! とコメントの数が最も多い投稿) を取得したい。

  1. これを行う最初の方法は、人気のある投稿へのリクエストが行われるたびに、投稿数と各投稿のいいね! をカウントすることですが、数百万の投稿がある場合、これは非常に時間がかかる可能性があります.
  2. これを行うもう 1 つの方法は、「noOfLikes」と「noOfComments」を POSTS テーブルに含めることです。そのため、人気のある投稿を取得するには、投稿テーブルにのみアクセスする必要がありますが、このアプローチの問題は、ユーザーがコメントを作成するたびに発生することです。投稿後、POSTS テーブルの 'noOfComments' をインクリメントし、COMMENTS テーブルにエントリを作成する必要があります。問題は、POST テーブルへのインクリメントが正常に行われたときに発生し、COMMENTS テーブルへの変更を行う前に接続が失われます。その場合、POST および COMMENTS テーブルに間違ったデータが表示されます。

これを行う方法?

4

1 に答える 1

2

データベースを制御できればこれは簡単ですが、Parseでこれを行うと、2つの主な問題があります(そのうちの1つはすでに言及しました):

  1. 私の知る限り、Parse ではクエリでのグループ化は許可されていません。つまり、(あなたのスキーマでは)すべての投稿を取得せずに、最も多くのいいね/コメントが付けられた投稿を取得することは実際には不可能です。これは、標準の SQL クエリ (JOIN および GROUP BY を使用) のように、いいね/コメントの数を含む新しい列を実際に動的に追加できないためです。
  2. 1 つのトランザクション内で複数のオブジェクトを更新することはできないため、ユーザーがコメントを追加できても、投稿オブジェクト内のコメントの数は変わらない可能性があります。

そうは言っても、(少なくともパースの使用を主張する場合) Post オブジェクトに 'noOfLikes' 列と 'noOfComments' 列を追加する必要があると思います。N 個の上位投稿を取得するための唯一の実行可能なソリューションを提供するだけでなく (それらすべてを取得する必要はありません)、実際の矛盾のリスクはかなり低いと思います。いつでもネットワーク (またはその他の) 例外をキャッチし、更新要求を一時的にローカルに保存して、後で再試行できます。

于 2012-04-28T10:33:25.337 に答える