воскресенье, 15 декабря 2013 г.

Сериализация в PHP

Будут сравниваться 4-е способа сериализации:
1) Стандартная сериализация serialize
2) JSON
3) msgpack
4) igbinary

Кратко об установке.
JSON раньше шел в стандартной поставке php. Сейчас нужно поставить дополнительное расширение php5-json.
msgpack
Сайт: http://msgpack.org/
Исходники: https://github.com/msgpack/msgpack-php и http://pecl.php.net/package/msgpack
Ставим:

cd /tmp
wget http://pecl.php.net/get/msgpack-0.5.5.tgz
tar xzf msgpack-0.5.5.tgz
cd msgpack-0.5.5
phpize
./configure
make
make test

Если тесты прошли нормально, то создаем пакет и ставим:
sudo checkinstall -D --install=no
sudo dpkg -i msgpack_0.5.5-1_amd64.deb

igbinary
Исходники: https://github.com/phadej/igbinary/tree/master и http://pecl.php.net/package/igbinary
Далее опять
cd /tmp
wget http://pecl.php.net/get/igbinary-1.1.1.tgz
tar xzf igbinary-1.1.1.tgz
cd igbinary-1.1.1
phpize
./configure
make
make test
sudo checkinstall -D --install=no
sudo dpkg -i igbinary_1.1.1-1_amd64.deb


msgpack добавляет функции
BinData msgpack_pack(phpValue);
phpValue msgpack_unpack(BinData);


igbinary добавляет функции
BinData igbinary_serialize(phpValue);
phpValue igbinary_unserialize($BinData);


Что бы они заработали, нужно незабыть включить их в php.ini:
[igbinary]
extension=igbinary.so

; Enable or disable compacting of duplicate strings
; The default is On.
;igbinary.compact_strings=On

[msgpack]
extension=msgpack.so


Что еще важно отметить.
serialize - стандартная функция php. JSON - старое и стабильное расширение. igbinary - тоже достаточно старая библиотека, давно вышедшая в стабильную ветку. msgpack - на данный момент все еще находится в стадии beta. С msgpack мне реально доводилось ловить глюки в ее предыдущих релизах. И если я решусь внедрять ее в продакшен, то там где, ее ошибки не принисут фатального ущерба.

Собственно тесты:


1. Массив вида
array (
  'v0' =>
  array (
    0 => 0,
    1 => 1,
    2 => 2,
    ...
    3 => 3,
    23 => 23,
    24 => 24,
  ),
  'rnd0' => '2e0c883df6e2cb771103f4409f053549094d6787',
    ..........
)

c 16384 элементами

Время
сериализации (msec)
Время
десериализации (msec)
размер упакованных данных (Kb)
MessagePack925678
igbinary
compact_strings=Off
9321278
igbinary
compact_strings=On
16321120
JSON143181022
SERIALIZE62392486

2.Массив вида
array (
  0 => 3183,
  1 => 4527,
  2 => 4084,
  3 => 4032,
  4 => 3920,
...
  262144 => 4455,
)



Время
сериализации (msec)
Время
десериализации (msec)
размер упакованных данных (Kb)
MessagePack830769
igbinary
compact_strings=Off
9331920
igbinary
compact_strings=On
9331920
JSON151071281
SERIALIZE86443988

3.Массив вида
array (
  0 => 7679461759223599104,
  1 => 4898705982311625344,
  2 => 5880628818820227328,
  ...
  262144 => 6940876209816891904,
)

Время
сериализации (msec)
Время
десериализации (msec)
размер упакованных данных (Kb)
MessagePack10292305
igbinary
compact_strings=Off
11333456
igbinary
compact_strings=On
11333456
JSON201725121
SERIALIZE92497828

4.Массив видаarray (
  0 => 0.00038631346578366,
  1 => 0.00016131634134538,
  2 => 0.00043595779928503,
  3 => 0.00011754334410814,
  4 => 0.00049353469548909,
  5 => 5.2391680201184E-5,
  .....
  262144 => 0.00041876046901173,
)


Время
сериализации (msec)
Время
десериализации (msec)
размер упакованных данных (Kb)
MessagePack9282305
igbinary
compact_strings=Off
11333456
igbinary
compact_strings=On
11333456
JSON751975061
SERIALIZE2641768538

5.Массив вида
array (
  0 => 'f7df8cb47630b8cd7eb73d0da7a23b9c01aaaa84f718499c1c8cef6730f9fd03c8125cab',
  1 => 'd30f79cf7fef47bd7a5611719f936539bec0d2e93bcf6eecb2611212e088d0d91f2ade9c',
  2 => '86bce22a4d2805649853ac7909c4efb4dd18f255086af6e4641abb18caafc151b9aa95c8',
  3 => '63afd0edc0371ad842d7a7ecc76260be4bc3e8c0da6cb383f8f9e58f2c8af88a8c0eb65e',
  4 => '13c80015875a668e8fc059517ffd124abbda63c12d95666e2649fcfc6e3af75e09f5adb9',
  ...
  32768 => '0e3808238b738aafc13a2a62f36d2a49dec4e191c22abfa379f38b5b0411bc11fa9bf92f',
)

Время
сериализации (msec)
Время
десериализации (msec)
размер упакованных данных (Kb)
MessagePack452401
igbinary
compact_strings=Off
462464
igbinary
compact_strings=On
2162463
JSON28162401
SERIALIZE1072806


Замечу что приведенные в таблицах данные являются примерными и зависят от данных. Т.к. данные у меня заполнялись случайным образом, то цифры получались разные, но разница не существенна и в целом эти цифры отражают реальную картину.

1 комментарий:

  1. No deposit bonus codes 2021 - Casino Sites
    You 딥 슬롯 can 네온 벳 play slots 토토 랜드 같은 사이트 games for free at the best casino sites that allow you to have real money gambling. There's also the chance 먹튀 to win real What is a no deposit bonus?How can 바카라총판 I win real money with free spins?

    ОтветитьУдалить