2012-05-03 22 views
1

jQuery/AJAXで自動詰め(オートコンプリート)機能を開発しています。問題は、このために使用するMySQLテーブルには30,000レコードがあり、サーバーに負荷がかかることです。だから私は訪問者がボタンを押すたびにMySQLテーブルを照会したくないので、ユーザーセッションごとに一度クエリを実行したいと思う。これを達成するためのオプションはありますか?たぶんキャッシングや30,000レコードを一度取得し、どこかに格納?jQuery/AJAXオートコンプリート、セッションごとに1回だけMySQLテーブルを照会します

おかげで、

Zolka

+0

memcacheを使用してください。適切である必要があります – Satya

+0

インデックスが正しく設定されていれば問題ありません。たぶん、いくつの結果が表示されるのかについてsom制限を実装しようとします。これはユーザースクロールとして追加されます。また、少なくとも3文字以上の文字列があると、サーバーを簡単に作ることができます。 –

+0

おそらくあなたのバックエンド(あなたのAJAXリクエストを送るプログラム/スクリプト)にそのようなものを実装する必要があります。 30k行を取得して各クライアントに送信することは、おそらく最良の方法ではありません。多くのデータのように聞こえる。いくつかの種類のセッションを作成し、フェッチされた行をファイル内の各セッションのサーバーに格納することができますが、これはDBを調べるのとほぼ同じです。 – simbabque

答えて

0

使用キャッシュオプション。しかし、それはユーザーが以前の値を入力して動作します。他の賢明なことは、サーバーにヒットします。

$(function() { 
    $("#empname").autocomplete(
    'getNames.action', 
     { 
      scroll:false, 
      minChars:1, 
      delay:0, 
      width:200, 
      autoFocus:true, 
      cache:true, 
      formatResult: function(data, value) { 

       return value.split(".")[0]; 
      } 
     }); 
}); 
+0

は、まずデータベースからすべての値を取得し、セッションに保存します。セッションオブジェクトで検索しようとしました – Daya

+0

上記の解決策はありますか?私はキャッシュがtrueに設定されているので、明らかに何らかのキャッシュを行っているということです。 – Zolka

0

30万レコード、良好なキーを使用すると、かなり高速に結果を得ることができます。

通常、すべてのキーを押すたびにAJAXを実行する必要はありませんが、ユーザーが入力するのに遅延が必要です(例:500ms)。

var t; 
$('#textbox').keyup(function() { 
    if (t) clearTimeout(t); 
    t = setTimeout(function() { 
     // AJAX call here 
    }, 500); 
}); 
関連する問題