Igbinary и PHP serialize
Если вкратце, модуль igbinary в ПХП — замена встроенным функциям сериализации. Встроеные функции хороши только в одном — сериализованное значение получается читаемым (хотя, на мой взгляд, JSON всё же получше будет).
Igbinary пренебрегает читаемостью (это вообще бинарный формат) в пользу скорости и компактности. Вчера ночью я перевёл пару мест в одном из проектов нашей компании, а утром мой друг, И. Б., кинул мне ссылку на статью, где сравнивается скорость работы встроенных функций и igbinary, причём в тестах на сохранение строк последний сливает первому.
Удивительный результат, так как, например, с числами всё иначе — там разница в несколько раз в пользу igbinary (в случае типа с плавающей запятой — более почти в 20), что же за проблема со строками?
У меня возникло подозрение, что я знаю в чём дело. Обычно, когда я изучаю новый модуль, я смотрю так же и на его настройки. Вчера я тоже их просматривал (в этом модуле их всего-то три) и хорошо запомнил одну из них — «igbinary.compact_strings».
Опция хорошая — помогает экономить память (например, при сериализации в memcached), работает она очень просто — при сериализации, если в данных попадается строка, проверяем не встречалась ли такая же строка ранее, если встречалась, повторно строку не сохраняем, сохраняем лишь ссылку на предыдущее вхождение.
По-умолчанию она включена и очевидным образом должна замедлять сериализацию строк. Я решил её выключить и посмотреть насколько быстрее станет. Результаты на скриншоте — слева опция выключена, справа — включена.
Как видите, разница разительная. Так что если вы ставите igbinary для скорости, то эту опцию лучше бы выключить.
Два вопроса:
PS: по поводу первого вопроса — имеется в виду столбец Serialize.
Комментарий для kildor.ya.ru:
Там случайные строки (тест я из статьи брал, можно посмотреть исходный код), так что я не знаю содержали ли они в тот момент дубликаты.
Я менял у нас memcache на memcached, там igbinary идет как бонус. Что интересно, я сразу вычитал, что compact strings лучше не включать, если вам нужна скорость. И еще более удивительно — у меня эта опция была по дефолту выключена. Я уже не помню, как все ставил и настраивал, но точно не тюнил это значение.
А так, расширение отличное, конечно же.