У меня есть веб-скрипт PHP, который принимает введенное пользователем регулярное выражение и использует его для поиска большого текстового файла (9,4 миллиона строк, около 160 МБ). На первой итерации моего сценария файл находился в обычной файловой системе, и когда мне нужно было найти его, я мог получить к нему доступ с помощью fopen / fgets и искать его построчно. В зависимости от сложности регулярного выражения, скрипт проходит через весь файл за 30-45 секунд.
Чтобы попытаться ускорить его, я установил раздел tmpfs размером 1 ГБ и переместил на него большой текстовый файл. Затем я изменил путь в скрипте PHP и надеялся увидеть немедленное улучшение. Однако скорость, с которой скрипт анализировал файл, не менялась, и при многократных запусках он иногда оказывался медленнее, чем при чтении файла из обычной файловой системы.
Кроме того, я попытался загрузить весь файл в оперативную память на PHP, но сначала вытащил его в массив, что улучшило время поиска примерно на 40%. К сожалению, это неприемлемый способ для меня, поскольку начальное время загрузки файла в массив довольно велико.
Все это происходит на виртуальном сервере с 12 ГБ ОЗУ, запущенным Debian 7, с nginx / php5-fpm.
Что происходит с моими tmpfs? Есть что-то, чего мне не хватает? Я предоставлю любую дополнительную информацию, необходимую.
Задача ещё не решена.
Других решений пока нет …