使用数据库vs文件处理静态数据

tvokkenx  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(279)

我有一个在我的网站名为“每周最佳用户”右栏框。所以,一个星期内,这个盒子的内容不会改变。所以我可以用两种方式存储数据:
使用表数据库(并通过事件每周更新)
使用文件并使用cron作业每周更新一次
现在我想知道,哪一个更好,成本更低?我是说执行死刑 select 在服务器上使用 file_get_contents() 以及 explode() 是吗?

jgwigjjp

jgwigjjp1#

这取决于很多不同的因素,举几个例子
有多少用户是本周最佳用户?5, 10, 100?
数据库当前生成了多少负载?您是只查询用户还是同时处理登录/日志解析/。。。用它?
您使用的是哪个数据库引擎?
您使用的是ssd还是hdd(只在大文件时才重要)
你在用哪个操作系统(内存中的一些缓存文件)
你使用持久的mysql会话吗?
我总是尝试将这些数据存储在数据库中,并在其中添加时间戳,以便能够同时显示过去的数据或从中创建统计信息;这样,我也可以简单地存储用户ID,而不需要从数据库中单独加载数据(例如。 SELECT user.name FROM user, user_of_week WHERE user.id = user_of_week.user AND user_of_week.weekid = 120 ORDER BY user_of_week.position ASC; )
您可以自己尝试针对特定案例进行测试—编写一个测试脚本并在测量时间的同时加载100次:

header('Content-Type: text/plain;charset=utf-8');
// Connect to database here
$TestAmount = 100;
$OverallTime = 0;
for($i = 0; $i < $TestAmount; $i++) {
    // Read current time
    $start = microtime(true);

    // Load data from database here

    // Get the amount of time it took
    $time = microtime(true) - $start;
    echo $i .': took '. $time ."\n";
    $OverallTime += $time;
}
echo 'Overall time: '. $OverallTime ."\n";
echo 'Average: '. ($OverallTime / $TestAmount);
// Close connection to database here

这将输出类似的内容:

0: took 4
1: took 5
Overall time: 450
Average: 4.5

对文件重复相同的步骤并进行比较。
在文件中存储数据时,您还可以使用json之类的东西—这更容易解析。

相关问题