5

EF 5.x および MVC3 で MYSQL を使用します。都市と国の組み合わせを持つ約 320 万行のテーブルがあります。クライアント側に、都市の検索用語を受け取り、jQuery/ajax を使用して提案を返すオートコンプリート テキスト ボックスがあります。

私が直面している課題は、このテーブルを初めて使用するときにメモリにキャッシュすることです。

        CityData = DataContext.Citys.OrderBy(v => v.Country).ToList();

        if (CityData.Any())
        {
            // Put this data into the cache for 30 minutes
            Cache.Set("Citys", CityData, 30);
        }

これは、db-context タイムアウトを 5 分に設定してもタイムアウトします。MySQL クライアントを使用して DB に対してこの SQL を実行すると、すべての行をプルするのに約 3 分かかります。

このデータをキャッシュに読み込む最善の方法は何ですか? テーブルを MySQL キャッシュ メモリに直接キャッシュできますか? または、キャッシュ内のデータを使用して検索するのではなく、用語検索を DB に直接送信する必要があります。

4

1 に答える 1

0

あなたの質問へのコメントに同意して、私はまた、その多くの行で、オートコンプリートのリターンを制限している可能性がありますか?(つまり、トップ10を取る)。各キーストロークですべての結果を返そうとしない限り、このためのDBへのラウンドトリップは大きなボトルネックにはなりません。

ボトルネックの場合は、すでにローカルで取得した結果を引き続きフィルタリングしながら、キーストロークごとにDBを非同期で呼び出すことで、これを解決しようと思うかもしれません。とにかくコードでこれを実行しようとするパフォーマンスヒットよりも、DB内のリストの再ソートと再クエリの結果が速くなると思います-私があなたの意図/質問を正しく理解している場合。

警告:DBアプローチへの一般的なラウンドトリップが、オートコンプリートのニーズ/データ量に対して十分な速さではないという立場にはまだ達していません-ここでパフォーマンスの問題に対処しなければならなかった他の誰かができるかもしれません追加の洞察を提供するために-Googleエンジニアが読んでいますか?:)

于 2013-01-18T16:59:12.293 に答える