我只有一个选项可以从这个文本文件中获取数据,因此我无法使用数据库来存储它。每天00:00重新创建函数获取数据的文件,因此它不会成为一个非常大的问题。最大2 MB的大小,一天结束时最多6,000 - 7,000行。 我担心的是它会抓取数据并将其显示在可以被访问很多次的网页上(approximately up to 10,000 per day or less
) - 它是否真的会使用file()
或者这个小的服务器使服务器过载文件应该没问题?请告诉我。感谢您抽出宝贵时间阅读我的问题,并可能回答。
.txt文件中的示例行:
1,42,16, 201,stackoverflow_user, 1, 6762160, 39799, 9817242, 6762160, 39884, 10010545,stackoverflow_user, 2, 1351147, 1165, 483259, 1351147, 1115, 241630, 0
1,46,27, 201,[stackoverflow_user | stackoverflow_userother], 1, 4078465, 286991, 1594830, 4078465, 287036, 1643156,stackoverflow_user, 2, 1357147, 1115, 241630, 1357147, 1065, 120815, 0
我的功能:
# read a file into an array
$lines = file('C:/path/to/file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
# flip our array over so the last lines of the file are first.
$lines = array_reverse($lines);
$n = 1;
$wanted = 21; # or however many lines you want.
$content = '';
foreach ($lines as $l) {
# treat the data as comma-separated values
$arr = explode(",", $l);
# if col 5 has multiple values, take the first one
if (preg_match("/\[(.+?) \|/", $arr[4], $matches)) {
$arr[4] = $matches[1];
}
# is arr[4] the same as arr[12]?
if ($arr[4] !== $arr[12]) {
# these two are not equal, so use these values
$data = array('rank-pos' => $n++, 'rank-name' => $arr[4], 'rank-dmuser' => $arr[12]);
$content .= Template::Load('rankinguserdm-' . ($n % 2 == 1 ? 2 : 1), $data);
}
# have we got enough data?
if ($n === $wanted) {
break;
}
}
$this->content = Template::Load('user_rankingsdm', array('rankings' => $content));
}
答案 0 :(得分:0)
这实际上取决于背景。如果您不希望大量的流量,那么它应该没问题。否则,找到一种方法将其存储在某处。数据库,RAM,核庇护所 - 任何事情都可以完成任务,只是不要每次都从文件系统中读取它。
我曾经遇到类似的问题,每秒几次从远程服务器读取文本日志文件(每个大约10 MB)。我认为,由于没有许多用户,我可以采用简单的快捷方式,每次直接从远程服务器获取它们。长话短说,当事实证明我的服务器有效地执行远程操作时,这种简单的快捷方式适得其反。
我最终必须将所有数据存储在MySQL数据库中,同时跟踪每个文件的大小并仅从上一个读取周期结束时读取(以避免重复)。可以从远程请求每个文件,每分钟最多一次。除了其他一些技巧之外,远程服务器正在愉快地完成它的工作,我的服务器有足够的数据满足我的需求。
tl; dr:取决于您期望的负载量,用户数量和硬件。如果你怀疑在某些时候你会有巨大的负担,那就帮自己一个忙,不要在飞行中做到这一点
干杯
答案 1 :(得分:0)
你可以每隔10分钟轮询一次文件。当天第一次读取数据,然后缓存这两个数据,并保存在该读取中找到的文件的长度。每次后续轮询只会从上次读取的位置读取,直到新的文件末尾,并将新的数据添加到缓存中。只要继续这一天。每次你只读取要添加的最后几行,所以你可以在合理的范围内尽可能快地轮询它,如果有必要的话,总是确保你得到最新的一行(但也许最后一行不是至关重要的立即显示,这意味着您可以减少轮询以节省负载。)
您不能说网页可能被访问的次数 - 如果每天只有两次,那么您的文件服务器不会超载,但是如果每天一百万次,是的,它会几乎可以确定!但从某种意义上说,正常生活中的实际访问次数是无关紧要的,如果可能会出现网页上的运行时间。例如,假设它是一家公司的网站,并假设这些股票突然有一天上涨,而世界的一半和他的狗想看看这个网站。如果Web主机是可靠的,那么它可能会应对,但您的文件服务器可能会出现问题。