我有10个文件,每个文件包含50到250行。
我需要能够从不同的文件中提取一个或多个随机行。
我目前这样做......
$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数据库并执行该查询?
谢谢!
答案 0 :(得分: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;
你得到经过的微秒的输出。
答案 1 :(得分:0)
在数据库中创建它应该比读取整个文件并将其洗牌更快。但是您必须将此数据插入到数据库中,这将产生额外的工作量。你应该手动检查,哪个选项更快。
但要记住还有一件事。如果你有大文件,那么内存使用量可能很大,所以你也应该考虑它。
答案 2 :(得分:-1)
10 * 250 = 2500行 - 对MySQL来说没什么。你可以用这些数据做任何你想做的事情,一切都会很快。而且,数据库肯定比文件更快。此外,您可以将其存储在Redis中并使用SRANDMEMBER - 只是替代变体。