А что у вас srednee тип string. Вы строки сравниваете? О_о
Вроде все путём, на объекты переделать.
_SP_, автор игнорит вопрос про количество читаемых файлов. Файл 1 мб ерунда для одного чтения, такой можно целиком считать и провести все поиски меньше чем за секунду. А вот если таких файлов может быть 4000 под перебор верного, это вот вам и нагрузочка с вариацией 0.5 по 40 секунд. Как по мне, если идёт перебор, то вернее будет все это запихивать в базу данных и работать с ней. Ну и не вижу смысла создавать диск в памяти, зачем, когда можно загнать в память все данные или же использовать memcached с периодическим обновлением данных.
второй вариант, если это все же 1 файл, то на лицо какие-то ошибки, для начала нужно включить логирование ошибок и просмотреть логи. Данную тему можно развивать сколько угодно долго.. пока неизвестны подробности.
Corvus, скорость всё путём, SSD.
Вопрос остается открытым, как много скрипт открывает этих 1 мб файлов производящих поиск в рамках одного запроса. В среднем.
Много раз замечал, что не стоит ставить, если мало трафика на сайте. Для этого можно поставить какой-то другой трекер, который не относится к поисковым системам. ну и желательно не ставить библиотеки и шрифты от гугла и яндекса ;-)
amazon aws, scaleway почасовая плата
Corvus, это меняет дело
if ( $fp = fopen($filename,'r-') ) {
fseek($fp, $offset);
что такое "r-" вам нужно использовать ключ "r"
какой $offset насколько он велик
получается что для разной широты и долготы у вас разные значения на чтении, в зависимости от того, какой файл вы считываете и насколько offset идёте. Сделайте замеры в каком именно месте идет задержка. Эта функция чтения или что? сколько раз вызывается эта функция, может быть у вас перебор по всем этим мелким файлам?)
скидываем кеш файловой системы и тестируем скорость чтения диска
sudo /sbin/sysctl -w vm.drop_caches=3
dd if=tempfile of=/dev/null bs=1M count=1024
какое значение скорости это показало?
_SP_, тут не сказано, какие права запросит его авторизация. Она может запросить не только адрес вашей почты, имя, id и токен, но и запросив у вас права, которые могут вас скомпрометировать, например доступ к вашей стеночке и последующая публикация на ней вялого.
Так что условия челенжа можно выполнить, так как это не обговаривалось. Что касается автора, вопрос в чем? постов накидать или что.
_SP_, мы за файл говорим или за файловую систему. Файл читается последовательно, в индекс файловой системы попадает например название этого файла, содержимое файла не разбивается по индексам.
В случае же базы данных мы можем побить множество нужных кусков данных под индексы и обращаться к этим кускам быстро отталкиваясь от своих задач. Аналогия, равносильно предположим создать 1000000 файлов и название указать широту, внутри файла же будет вся информация по городам с этой широты. так мы можем быстро открыть файл имея значение широты. Потому как файловая система строит индекс по названию файла. Но кто в здравом уме будет создавать столько файлов и гемороится, когда можно намного быстрее и проще сделать это с базой данных. Это вам любой практикующий разработчик скажет, что вы плывёте в другое русло.
Автор написал про 9 гб данных и 4000 файлов. несложно посчитать размер каждого файла и потом с этого размера последовательное чтение да еще и с поиском нужного значения.
ArbNet, возьмите да сделайте, github открытый код, независимое хранилище в браузере, а не у вас в базе, которая может упасть или быть скомпрометирована.
Не пойдёт, взять так просто авторизации и у себя накапливать. Этим воспользуется только совершенно безграмотный разработчик.
еще выполнить
sudo sysctl -w fs.nr_open=500000
sudo sysctl -p
забыл упомянуть, что ulimit -n 32768 && ulimit -a нужно применить на том пользователе, под которым у вас запускается процесс. Например пользователь вебсервера www-data
перейти под пользователя sudo -u www-data sh
дальше ulimit -n 32768 && ulimit -a
exit
не слушайте, дисковые операции чтения дорогие, в бд формируется индекс и по нему можно перемещаться сразу к записи с данными, минуя последовательное чтение.