• Авторизация


Скорость считывания из файлов 05-04-2009 20:22 к комментариям - к полной версии - понравилось!


Недавно пришлось оптимизировать доску объявлений, с разделами, и подразделами. Что из это получилось, можно посмотреть тут http://vse.doski.ws/.

Обычное трехуровневое дерево, которое хранится в файле наподобие CSV.
Разделителем полей является |, разделителем строк #13#10..

Что мне не понравилось - чтобы найти категорию по "ID" и/или "Значению", нужно пройДтись по всем строкам,
каждой сделать explode ('|',$row), и сравнить искомый элемент (ID и/или "Значение") с результатом explode.

Не долго думая, я перевел все все дерево в трехуровневый массив,
и сохранил в другой файл, предварительно сделав serialize.

Трехуровневый массив позволял делать поиск и проверку элементов дерева
по индексу isset($tree[$ID]) ,и по значению - in_array(...).
Чтобы загрузить весь массив нужна одна строка кода

$tree = unserialize(implode('',file('tree_new.dat')));

Никаких while, foreach, for, c переборам по строкам, при таком методе не нужно.

Конечно, serialize/unserialize достаточно тяжелые функции, но они выполняются всего 1 раз,
в отличии от explode для каждой строки.

Чтобы разобраться, я написал тестер.
У меня было 350 категорий, и занимал обычный файл 8,2 КБ, после serialize - 24.1КБ

и получаю вот такие результаты :

Делаю 5 итераций по 8 раз.
Тестирование file(), explode().
cid = 9110, cidname=Услуги Разные, ncid=, katname=Фото, видео, аудио; Средний рез. 0.0101898193359
Тестирование unserialize, serialize.
cid = 9110, cidname=Услуги Разные, ncid=, katname=Фото, видео, аудио; Средний рез. 0.0376589775085

метод с serialize медленней, оказывается медленней в 3 раза!!!

Вопрос почему?

Думаю что не смотря на все свои обороты, кеши, и т.д, жесткий диск - самое медленное устройство.
Т.к. при serialize, размер файла возрастает в ~3 раза, то и скорость загрузки тоже.
Что прямолинейно отражает тест.

Выводы.
Старайтесь как можно больше убирать избыточность данных, в файлах, и базах mysql.
Большее внимание уделять структуре хранения данных на этапе проектирования приложения.
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Скорость считывания из файлов | InternetVoice - Дневник InternetVoice | Лента друзей InternetVoice / Полная версия Добавить в друзья Страницы: раньше»