より良い解決策を探しています。
私は 200.000 人以上のユーザーと膨大な量の SQL クエリを持つコミュニティを手に入れました。それらのほとんどには、結果にユーザー ID が含まれています。ほとんどの場合、出力時に関連するユーザー名を使用して回避する必要があります。
[userId - username] は別のテーブルです。このテーブルへの大量の JOINS を避けるために、ホール テーブルを memcacheD の配列としてキャッシュすることにしました。それは最初はうまくいきました。SQL サーバーの負荷が大幅に低下しました。すべてが以前よりも本当に速く実行されます。
しかし、数週間後、ホール サーバー クラスター (5 Web サーバー) に問題が発生しました。キャッシュされた userid-username データセットは巨大になります。memcacheD がそのレコードを要求サーバーに送信している間に、ネットワーク インターフェイスで内部の 1000Mbit データ制限に達したほどです。データをシリアル化しようとしましたが、戦利品は変わりませんでした。
私は今行くべき3つの方法を考えています:
1) memcacheD がすべてのサーバーでレコードをキャッシュするように強制します。したがって、クラスターは別のサーバーからキャッシュを要求する必要はありません。ただし、データセットのすべての変更は、すべてのサーバーで同時に行う必要があります。-とにかく、それが可能かどうかはわかりません。
2) JOINS に戻り、cacheexecute を使用します。
3)より良い解決策があります!:)