4

それぞれ50から250行のどこかに含まれる10個のファイルがあります。

異なるファイルから1つ以上のランダムな行をプルできるようにする必要があります。

私は現在これをしています...

$lines = file($filePath);
if ($number == "1") {
    return $lines[array_rand($lines)];
}
else {
    shuffle($lines);
    return array_slice($lines, 0, $number);
}

ただし、ここでMySQLを使用して同じことを行う方法を読んだだけです。

https://stackoverflow.com/a/4329447/390480

これらの10個のファイルをMySQLデータベースに移動し、代わりにそのクエリを実行することで、パフォーマンスが大幅に向上するでしょうか。

ありがとう!

4

3 に答える 3

2

私の経験では、情報があまりない場合は、データベースよりもファイルから情報を取得する方が高速です。私の場合、たとえば家のタイプの配列を格納するファイルがあり、ファイルから取得する方が高速でした。ファイルは約10kbのみで、パフォーマンスは10倍高速でした。パフォーマンスの向上は間違っているかもしれませんが、これらの行を含むテーブルを削除してテキストファイルxDを使用するのに十分な速さでした。

パフォーマンスを確保するための最良の方法は、関数を利用microtime()して両方の方法で実行することです。次に、独自のベンチマークを通じてパフォーマンスを確認できます。

私はこれをよく使います:

$start = microtime(true);

// my code;
// If it's not a very long script, you should always put it inside a loop, let's say thousands times or more, depending on the script, because sometimes just the resources used by the system could vary the benchmark, as suggested by @Colin Morelli .

echo microtime(true) - $start;

経過したマイクロ秒の出力を取得します。

于 2013-03-19T12:37:43.660 に答える
0

データベース内に作成することは、ファイル全体を読み取ってシャッフルするよりも高速である必要があります。ただし、このデータをデータベースに挿入する必要があります。これにより、追加のワークロードが生成されます。手動で確認する必要があります。どちらのオプションの方が高速です。

しかし、もう1つ覚えておいてください。大きなファイルがある場合、メモリ使用量が膨大になる可能性があるため、それについても考慮する必要があります。

于 2013-03-19T12:42:19.290 に答える
-1

10 * 250=2500行-MySQLには何もありません。このデータを使って何でもできます。すべてが高速に動作します。そして、データベースは間違いなくファイルよりも高速に動作します。また、Redisに保存して、SRANDMEMBERを使用することもできます。これは単なる代替バリアントです。

于 2013-03-19T12:51:16.073 に答える