0

アプリ内にシンプルなフォロワー/フォローシステムを設定しています。

セッション中に「フォローしているユーザー」の完全な配列を保存して、データベースを何度もクエリする必要がないようにするための最良の方法は何でしょうか。

明確にするために:ユーザーが承認された後にログインすると、データベースにクエリを実行し、ログインしたユーザーがフォローしているユーザーの完全なリストを取得し、最終的にJavaScript変数として保存します。このようにサイト全体で、ユーザーがナビゲートしているときに、遭遇する可能性のある他のユーザーに対して次のステータスを常に確認できます。

このクエリは、ユーザーがページ全体を読み込んだときに1回だけ実行され、ページ内を移動することは繰り返されません。

これは、JavaScriptで生成されたコンテンツ、つまりユーザーホバーカードなどに適しています。

ただし、この配列(ユーザーIDのみ)をPHP自体に格納して、「フォロワー/フォロー」チェックの実行が必要なコンテンツサーバー側を生成しながら、次のテーブルへのそれ以上のクエリを防ぐことができるようにします。

これを行うための最良の方法は何でしょうか?

結果はmemcachedにキャッシュされることを覚えておいてください。ただし、ルックアップをまったく回避でき、それをチェックするための一貫した配列があれば素晴らしいと思います。

前もって感謝します

4

3 に答える 3

2

だから私はこれを正しくします、あなたはそれが各ページで照会されないようにこのリストを保存したいですか?

まず、このデータを必要とするページでのみこのクエリを実行することをお勧めします。次に、これらのページではこれを試さないことをお勧めします。

ユーザーがフォローを停止するか、フォローを開始するとします。データの外部セッションをパージするために独自のPHPアプリにプログラムされた複雑なキャッシュ計算機またはイベントバブラー(これは悪いことですが、ユーザーは自分のものではないデータにアクセスできますが、セッションは事実です)は、セキュリティとパフォーマンスに関係している可能性があります。

より良い方法は、新しいページごとにクエリを再度実行することです。これははるかに簡単で、おそらくパフォーマンスが高く、マイクロ最適化にはなりません。

編集

1ページで1万行を選択している場合は、何か問題がある可能性があります。あなたはそれを間違った視点から見ているかもしれません。

于 2012-09-21T14:14:03.327 に答える
1

それをセッション変数に格納します。

アップデート

現在のユーザーをセッションに保存し、ポップアップ情報を取得するために既に実行しているクエリに追加し、ポップアップ担当者が現在のユーザーをフォローしているかどうかをテストすることを追加します。

于 2012-09-21T14:12:27.830 に答える
1

頭に浮かぶ2つの方法は、毎回適切に配置されたインデックスを使用して結合を作成することです。これは、実行したくないと言っています。セッション内の単純な配列は、おそらく次のようになります。

if (!isset($_SESSION['following']) {
    $following = $user->getFollowingIds(); //some query in here to get an array of ids
    $_SESSION['following'] = $following;
    $_SESSION['following_str'] = implode(',', $following);
}

次に、フォローしているユーザーのすべてのステータスを取得する場合はいつでも、$user次のようなクエリを作成できます。

$query('SELECT status.* FROM status WHERE user_id IN (' . $_SESSION['following_str'] . ')'); //not sanitized or safe but you get the idea
于 2012-09-21T14:27:58.047 に答える