Я знаю, что сериализация используется для
преобразовать типы данных в хранимые
формат для таких целей, как кэширование.
Что я более конкретно спрашиваю, так это то, при каких обстоятельствах вам следует принять решение о хранении данных (используя serialize()
в PHP, pickle
модуль в Python и т. Д.)?
Допустим, у нас был веб-сайт с высоким трафиком, и на нашей странице /blog
мы используем xml-файлы статического контента, mo-файл gettext и динамически генерируемый контент из базы данных.
Пример № 1:
Файл, на который мы полагаемся для статического содержимого, en/blog.xml
:
'<content><![CDATA[
<h1>Welcome to my blog!</h1>
<p>Lorem ipsum dolor sit amet..</p>
]]></content>'
Хотели бы мы сериализовать сам этот xml-файл и сохранить его в кеше?
Пример № 2:
У нас также есть динамически генерируемая форма, обычно я бы предположил, что я не буду сериализовать что-либо, потому что она генерируется на стороне сервера и динамична, но наши метки полей формы интернационализированы, и пользователь запросил эту страницу на испанском, поэтому мы используем класс перевода, который захватывает метки полей формы, хранящиеся в формате mo/csv/xml
.
Содержимое contact-us.php
:
<label for="first_name"><?php echo $L->_("First Name");?></label>
<input id="first_name" name="first_name" type="text">
Преобразование идентификатора сообщения «Имя» извлекается из файла перевода уровня приложения, который мы анализируем и храним в массиве, который находится в нашем классе перевода. Таким образом, для нашего кода было бы идеально не анализировать файл mo
при каждом запросе страницы, а вместо этого сериализовать весь массив после анализа mo, а затем полагаться на сериализованный дамп этого?
Пример № 3:
Допустим, на нашей странице блога мы добавили 5 самых последних сообщений в блоге.
$posts = BlogClass->sql('SELECT blog_message, blog_author FROM blog_posts LIMIT 5 ORDER BY blog_date DESC');
Хотели бы мы полагаться на что-то вроде memcache и просто установить ключ к результату оператора sql, будет ли он сериализовать результаты запроса, или?
Бонус:
Если бы кто-то мог предоставить конкретные примеры эффективного / практического использования / неправильного использования сериализации, это было бы замечательно - что-то вроде многостраничной, огромной огромной формы, которая извлекает информацию из базы данных и сохраняет материал в сеансах, или любые примеры, когда вам приходилось полагаться на сериализацию ..