Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загрузить файл в память для последующего использования (чтения через fopen)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
freelsd
Отправлено: 13 Февраля, 2016 - 10:54:34
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Есть api jот геоип, который ищет в файле информацию по определенному ип. Но с диска все это происходит очень медленно. Вопрос вот в чем: можно ли загрузить файл в память, чтобы к нему потому можно было обращаться как к обычному файлу (читать, писать и тд). Файл бинарный. Спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Февраля, 2016 - 11:00:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
freelsd
Отправлено: 13 Февраля, 2016 - 11:34:54
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




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

Там, вроде каждое обращение к геоип базе это открытие файла заново. И в общем-то интересно, как бинарный файл в память загрузить для работы. По теме ничего особо толкового не нашел.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Февраля, 2016 - 11:47:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




С точки зрения системного апи - да, получение дескриптора файла на чтение каждый раз новое.
Вот только это не имеет ничего общего с обращением к физическому диску - это на усмотрение ОС. Дисковый кэш уже давным-давно реализован. При чтении блока, этот блок сохраняется в RAM, последующие запросы на чтение этого блока обрабатываются уже напрямую из RAM. Запись в файл, к слову, тоже осуществляется в памяти. На диск изменения (ака грязные страницы) сбрасываются через вызов fsync вручную или по таймеру или по достижении некоторого порогового числа этих грязных страниц.

PHP не экспортирует флаги вроде O_DIRECT. Поэтому, если только файл в принципе помещается в память и достаточно часто используется - с диска он читается только один раз.


-----
PostgreSQL DBA
 
 Top
freelsd
Отправлено: 13 Февраля, 2016 - 12:11:22
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Мелкий пишет:
С точки зрения системного апи - да, получение дескриптора файла на чтение каждый раз новое.
Вот только это не имеет ничего общего с обращением к физическому диску - это на усмотрение ОС. Дисковый кэш уже давным-давно реализован. При чтении блока, этот блок сохраняется в RAM, последующие запросы на чтение этого блока обрабатываются уже напрямую из RAM. Запись в файл, к слову, тоже осуществляется в памяти. На диск изменения (ака грязные страницы) сбрасываются через вызов fsync вручную или по таймеру или по достижении некоторого порогового числа этих грязных страниц.

PHP не экспортирует флаги вроде O_DIRECT. Поэтому, если только файл в принципе помещается в память и достаточно часто используется - с диска он читается только один раз.


А это можно как-то экспериментально проверить - читается ли он один раз или при каждом вызове fopen?
 
 Top
Мелкий Супермодератор
Отправлено: 13 Февраля, 2016 - 12:31:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Поставьте xdebug, включите профилирование и посмотрите потом в kcachegrind'е где и сколько времени тратите.
Всяко полезнее будет, чем тыкать пальцем в небо "наверное, медленно с диска читается"


-----
PostgreSQL DBA
 
 Top
freelsd
Отправлено: 13 Февраля, 2016 - 12:42:45
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Мелкий пишет:
Поставьте xdebug, включите профилирование и посмотрите потом в kcachegrind'е где и сколько времени тратите.
Всяко полезнее будет, чем тыкать пальцем в небо "наверное, медленно с диска читается"


Спасибо большое!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB