0

私は約9.5K行のMySQLテーブルを持っていますが、これらはあまり変更されませんが、ゆっくりと追加する可能性があります。

誰かがバーコードをスキャンした場合、そのバーコードがこのテーブルの値と一致するかどうかを確認する必要があるプロセスがあります。これを達成するための最速の方法は何でしょうか?これらの値にはパターンがないことに言及する必要があります

ここにいくつかの考えがあります

  1. MySQLテーブルをクエリするためのPHPファイルへのAjax呼び出し(私の考えでは、これは最も遅いでしょう)
  2. ログイン時にこのMySQLテーブルを配列にロードします。次にAjaxをスキャンするときにPHPファイルを呼び出して配列を確認します
  3. ログイン時にこのテーブルを配列にロードします。スキャンページを表示するときに、何らかの方法でその配列をJavaScript配列にロードし、JavaScriptで確認します。(これは、Ajax呼び出しとMySQLクエリを排除するため、私には最速のようです。サーバーとブラウザーに遅れをとらないように、より小さな配列に分割するのが効率的でしょうか?)
4

4 に答える 4

6

正直なところ、テーブル全体をロードすることは決してありません。私がすることは、AJAX リクエストを PHP ゲートウェイに送り返し、データベースにクエリを実行して結果を返す (または何も返さない) ことだけです。これは非常に高速で (レイテンシーのみに依存するため)、結果を大量にキャッシュできます ( memcachedなどを介して)。

「検証」のために配列全体をロードする理由は本当にありません...

于 2012-12-20T17:13:24.543 に答える
2

適切にインデックス化されたMySQL テーブルを使用してから、配列を調べて何かを探す方がはるかに高速です。

しかし、最終的には、データをどうしたいかによって異なります

于 2012-12-20T17:01:48.627 に答える
2

あなたが言及したように、テーブルには約9.5Kのデータが含まれています。ログイン ページまたはスキャン ページにデータをロードするロジックはありません。

テーブルにインデックスを付け、必要に応じて ajax 呼び出しを行うことをお勧めします。

頑張ってください!!

于 2012-12-20T17:05:09.863 に答える
0

9.5 K 行はそれほど多くありませんが、関連するデータ量の転送にはある程度の時間が必要です。

したがって、一般的には、サーバー側で値の検証を実行することをお勧めします。AJAX は、これを非常に簡単に行うための適切なテクノロジです。

特定の 1 行を見つけるためだけに 9.5 K 行すべてをロードするのは、間違いなくリソースの無駄遣いです。単一の値に対してSELECT クエリを実行します。

クライアント側/AJAXでのPHP機能の公開

クライアント側で PHP クラス全体または単一のメソッドを AJAX メソッドとして公開できるxajax プロジェクトをご覧ください。さらに、xajax は、クライアントとサーバー間のパラメーターの交換中に役立ちます。

検索する属性の索引付け

バーコード値を保持する列がインデックス化されていることを確認してください。検証プロセスが遅くなる傾向がある場合は、MySQL テーブル スキャンに注意してください。

テーブル スキャンの回避

テーブル スキャンを回避し、クエリを高速に実行するには、固定サイズのフィールドを使用してください。たとえば、他のタイプに加えて VARCHAR() を使用すると、行のサイズが固定されなくなるため、クエリが遅くなります。データベースが結果セットの次の行の場所を簡単に予測することを実質的に妨げる固定サイズのテーブルはありません。したがって、たとえば、VARCHAR() の代わりに CHAR(20) を使用します。

最後に:セキュリティ!

クライアント側に転送されるデータは機密データを公開する可能性があることを忘れないでください。9.5 K 行がクライアントのブラウザーによってレンダリングされない場合がありますが、行は生成された HTML ページに存在します。Show sourceを使用すると、ユーザーはすべての有効な数値を把握できます。

有効なバーコード値を公開することは、プロジェクト コンテキストではセキュリティ上の問題になる場合とそうでない場合があります。

PS: ご質問とは関係ありませんが、スプレッドシート データの読み取りまたは書き込みにはPHPexcelを使用することをお勧めします。PEAR ベースのフレームワークなどの他のソリューションに加えて、PHPExcel は何にも依存していません。

于 2012-12-20T17:23:43.220 に答える