4

我有 10 个文件,每个文件包含 50 到 250 行。

我需要能够从不同的文件中提取 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()并双向进行。然后你可以通过自己的benchmark来查看性能。

我经常使用这个:

$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

在数据库中制作它应该比读取整个文件并改组它更快。但是您必须将此数据插入数据库,这将产生额外的工作量。您应该手动检查,哪个选项更快。

但请记住另外一件事。当您将拥有大文件时,内存使用量可能会很大,因此您也应该考虑一下。

于 2013-03-19T12:42:19.290 回答
-1

10*250 = 2500 行——这对 MySQL 来说没什么。你可以用这些数据做任何你想做的事情,一切都会很快。并且数据库肯定会比文件运行得更快。此外,您可以将其存储在 Redis 中并使用SRANDMEMBER - 只是替代变体。

于 2013-03-19T12:51:16.073 回答