Реклама на сайте Advertise with us

Php частая загрузка данных\файла скриптом - оптимизировать

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 24/10/16 в 21:36       Ответить с цитатойцитата 

Есть файл 100Кб+, который раз в несколько секунд надо некоторым способом парсить скриптом. Т.е. каждый раз при запуске php скрипта (как я сказал довольно часто) файл подгружается и некоторым способом обрабатывается. Возможно PHP попробует оптимизировать и загонит этот файл в память, а возможно и нет.

Как лучше поступить дабы не нагружать дисковый IO? Пока из идей загнать файл в кеш, но этот способ на крайний вариант. Может в php 7 есть что-то на этот случай.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 25/10/16 в 00:06       Ответить с цитатойцитата 

есть ссд, и похуй на ио =)
там от 40тысяч до полутора миллионов ио против 160 на всяких крутящихся.

7
 

Web Developer С++

С нами с 25.11.01
Сообщения: 859
Рейтинг: 759

Ссылка на сообщениеДобавлено: 25/10/16 в 00:44       Ответить с цитатойцитата 

Я не вижу особой проблемы при таких нагрузках - "файл 100Кб+, который раз в несколько секунд". Вот для 10-100 запросов в секунду это более актуально, к тому же у ОС есть свой дисковый кеш.

Для справки, в PHP тоже есть разделяемая память в которую можно загнать этот файл и/или другие данные. Это лучше SSD!
http://php.net/shmop
http://www.ibm.com/developerworks/ru/library/os-php-shared-memory/index.html

Софт для вебмастеров, криптобот, программинг (C++/PHP), партнерка: https://dfservice.com/ru/

7
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 25/10/16 в 03:04       Ответить с цитатойцитата 

Если файл открывается на чтение, то пофигу абсолютно. Это очень легкая операция и к тому же кешируемая системой. 99.999% ресурсов сожрет именно парсинг.
Тут лучше оптимизировать так, что бы кешировался результат парсинга.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

7
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 25/10/16 в 07:12       Ответить с цитатойцитата 

кешируй в php результаты парсинга - т.е. оптимизировать парсер и поменять способ хранения.
далее просто подключаеш $data = include "твой файл c данными.php"
так php заиспользует opcache- а там само разберется в файл кешировать или в память.

6
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 25/10/16 в 13:20       Ответить с цитатойцитата 

Ailk: Да, SSD и он тоже не резиновый.
DF™: Что-то такое я и искал.
Stek: Есть подозрение, что сисетма кеширует, но как всегда бывает и система вроде дефолтная, а какой-то парметр админ отключил, так как он по какой-то странной причине, ну хотел именно так! Сталкивался с подобным, когда админы отключают кеширование вебсервера без обьяснения причин или временно, затем забыл включить. Сервисы работают на мониторинге, админа мало волнует остальные детали.
rickdeckard: Можно и так попробовать. Спасибо. Замечу, что бывает, что и этот кеш отключали мне админы в одном из ДЦ, как типа не приносящий особого эффекта, что, как минимум мне казалось странным.

0
 



С нами с 19.11.02
Сообщения: 95
Рейтинг: 218

Ссылка на сообщениеДобавлено: 25/10/16 в 14:22       Ответить с цитатойцитата 

Если это лог, который модифицируется постоянно или нечто похожее на лог. То тут возможно стоит хранить/изменять/читать этот лог в/из памяти(memcache|redis|APCu или вообще в tmpfs).
Если же это просто файл для чтения, с набором неких данных, то он 100% закешируется системой в cached Mem(если свободной памяти достаточно).

4
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 25/10/16 в 14:31       Ответить с цитатойцитата 

Axel: Это просто csv данные только для чтения, для обработки входящих извне данных.
Пока сделал влоб через file_get_contents.

0
 



С нами с 11.10.12
Сообщения: 428
Рейтинг: 1032


Передовик Master-X (16.11.2012)
Ссылка на сообщениеДобавлено: 25/10/16 в 15:40       Ответить с цитатойцитата 

Если постоянно читается один и тот же файл такого размера, очень вероятно система его держит в дисковом кэше.

Если же дисковый кэш настолько загружен, что файл каждый раз считывается с диска, то проблема с IO не в том месте, где ты её ищешь.

По shmop и прочему. Меня терзают смутные сомнения, что разбор csv (не руками, а fgetcsv/ str_getcsv) быстрее разделяемых способов хранения просто потому, что не нужен затратный unserialize.

Если у скрипта очень тяжелый старт (загрузить большую кучу данных, что-то посчитать и только после этого он готов к работе), тогда смысл что-то делать есть. В твоем случае смысла не видно.

Если ты в неведении о текущей загруженности IO, посмотри в вывод
Код:
iostat -dx 2

(первый блок не смотри, это общая статистика с момента загрузки; дальше раз в 2 секунды выводится текущая статистика).

Последи за колонками avgqu-sz (средняя длина очереди) и %util (общая загруженность). Если значения постоянно сидят близко к нулю, пусть всё работает как есть.

apache, bash, css, elasticsearch, ffmpeg, html, js, mysql, mongo, nginx, php; *nix only

7
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 25/10/16 в 16:28       Ответить с цитатойцитата 

http://php.net/manual/ru/splfileobject.fgetcsv.php
Для парсинга цсв файлов. Сравни потребление памяти этим и через file_get_contents.
(пример1 и 2)

7
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 25/10/16 в 17:48       Ответить с цитатойцитата 



Там немного не стандартный csv и парсиь его удобно регуляркой, так как имеет значение в 99% только вхождение ключевика в файл.

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 25/10/16 в 18:01       Ответить с цитатойцитата 

Можно смешать код и данные: разбирать цсв по крону и модифицировать код основного скрипта подставляя сразу готовые данные.

Плохо, но эффективно. Так обычно гадость всякая делает. icon_smile.gif

8
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 25/10/16 в 20:08       Ответить с цитатойцитата 

Давно не писал на php, но может есть смысл демонизировать скрипт и сделать event loop, а не рестартить его раз в несколько секунд? Если старт ресурсоёмок само собой (много либ, коннектов куда-нибудь и т.д.)

Как уже выше писали - размер файла не тот что бы париться, скорее всего будет сидеть в кеше

True хостинг

7
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 26/10/16 в 07:27       Ответить с цитатойцитата 

Yacc писал:
Можно смешать код и данные: разбирать цсв по крону и модифицировать код основного скрипта подставляя сразу готовые данные.

Или, подогревать кеш результата парсинга кроном, и уже не так гадостно будет smail101.gif

2
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »