У меня есть только один способ захватить эти данные из этого текстового файла, поэтому я не могу использовать базу данных для ее хранения. Файл, из которого данные захвата функции воссоздается каждый день в 00:00, так что это не проблема, что она станет очень большой. Максимальный размер 2 МБ и максимум 6000-7000 строк в конце дня. Меня беспокоит то, что он захватывает данные и отображает их на веб-странице, где ее можно получить много раз ( 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)); }
Это зависит от контекста. Если вы не ожидаете большого количества трафика, тогда все должно быть в порядке. В противном случае найдите способ сохранить его где-нибудь . База данных, ОЗУ, ядерные убежища – все будет работать, просто не читайте ее из файловой системы каждый раз.
У меня когда-то была аналогичная проблема с необходимостью читать текстовые лог-файлы (каждый около 10 МБ) с удаленного сервера несколько раз в секунду. Я подумал, что, поскольку таких пользователей не так много, я могу просто взять простой ярлык и получить их каждый раз прямо с удаленного сервера. Короче говоря, этот простой ярлык обернулся, когда выяснилось, что мой сервер эффективно удалил пульт.
В конечном итоге мне пришлось хранить все данные в базе данных MySQL, сохраняя при этом отслеживание размера каждого файла и чтение только с конца предыдущего цикла чтения (во избежание дублирования). Каждый файл может запрашиваться у пульта не чаще одного раза в минуту. Наряду с несколькими другими трюками удаленный сервер делал счастливо свою работу, и у моего сервера были свежие данные для моих нужд.
tl; dr: решайте в зависимости от того, сколько нагрузки вы ожидаете, количества пользователей и оборудования, которое вы получили. Если вы подозреваете, что в какой-то момент у вас будут огромные нагрузки, сделайте себе одолжение и не делайте этого на лету
ура
Вы можете периодически опробовать файл, скажем, каждые 10 минут. Первый раз в день читайте данные, затем кешируйте эти данные, а также сохраняйте длину файла, найденного в этом чтении. Каждый последующий опрос, который вы читаете только с того места, где доходило последнее чтение, до нового конца файла и добавлял в кеш эту новую часть данных. Просто продолжайте делать это в течение дня. Каждый раз, когда вы читаете только последние строки, которые вы хотите добавить, вы можете, вероятно, опробовать его так быстро, как вам нравится, если необходимо, чтобы всегда быть уверенным, что у вас есть последняя строка (но, может быть, последняя строка или две не имеют жизненно важного значения для показать немедленно, то есть вы можете опросить менее часто, чтобы сохранить нагрузку).
Вы не говорите, сколько раз веб-страница, вероятно, будет доступна – если только два раза в день, то ваш файловый сервер не будет перегружен, но если миллион раз в день, да, это почти наверняка! Но в некотором смысле фактическое количество обращений в нормальной жизни не имеет значения, если может наступить время, когда может произойти прогон на веб-странице. Например, предположим, что это сайт компании, и предположим, что акции внезапно взлетают один день, а половина мира и его собака хотят посмотреть на сайт. Веб-хост может справиться, если он надежный, но ваш файловый сервер может иметь проблемы.