1

巨大な Web サイトと、いくつかの列 ("ID"、"AuthorID"、"Message"、"Time" など) を持つ巨大なテーブル (数百万のエントリ テーブル) があり、Twitter のようなメッセージが含まれているとしましょう。

次の簡単なクエリを実行します。

SELECT * FROM HugeTable ORDER BY Time DESC LIMIT 1,10;

このクエリは何度も実行されます (1 秒あたり数十回)。このクエリが非常に高速であることを確認するにはどうすればよいですか?

memcached が解決策になる可能性があると思いましたが、新しい投稿は非常に迅速に追加され、memcached を使用すると「古い」メッセージをユーザーに提供できます。

mysql サーバーが 1 つしかなく、すべてのトラフィックを処理できるほど優れているとします。

私の問題は、サーバーがテーブル全体を取得し、それを並べ替え (ここでは大きなボトルネック)、最初の 10 のみを取得する必要があることです。もしかしてパーティショニング?また、テーブル内では、新しい投稿が下に配置されるため、新しい投稿には以前よりも「ID」と「時間」>= があると想定しても安全です。

前もって感謝します。

PS: 私は MySql の専門家ではありません (基礎は知っていますが)、NoSql メソッドについての手がかりもありません。NoSql が私の仕事を十分に満たす方法であると信じているなら、私は何か新しいことを学ぶことにオープンです :)

4

2 に答える 2

3

ご想像のとおり、キャッシングが最適です。必要な 10 個のレコードを含む並列テーブルを作成するか (挿入を行うたびに、最も古いレコードを削除します)、同じことをメモリ内のスタックのさらに上で実行します。キャッシュにあるものをどのように管理するかについてです。

于 2012-07-24T11:08:10.593 に答える
0

あなたの質問に対する答えではありませんが、あなたの問題に対する答えとして。クエリは使用しませんが、websocket ソリューションを使用して、クライアントが到着したときに投稿をプッシュします。接続されたクライアントは、到着時に常に最新の投稿を受信し、websockets ソリューションのオーバーヘッドは少なくなります。

于 2012-07-24T11:41:27.713 に答える