Содержание:
2. Типы сериализации в применении ИТ
3. Сериализация в 1С
1. Что такое сериализация и зачем она нужна
Сериализация – это слово достаточно мудреное, но на самом деле, если посмотреть не с точки зрения 1С, а обычной лингвистики, то всё сразу намного упрощается.
Суффикс «-ция» означает процесс, протекание, действие. Вы сами легко можете найти десятки примеров таких слов. В процессе участвует «серия», слово, хорошо понятное и часто используемое.
«Серия» - латинское слово, означающее просто «ряд, вереница, последовательность». Сериал – несколько недлинных фильмов подряд, связанные между собой.
Сериалы (а значит и сериализация) в кино появились намного раньше, чем в информатике и 1С, но несли там ту же функцию – разбить что-то большое, объемное на короткие, удобные (для просмотра или записи на носитель, или для передачи) фрагменты.
Уточню, немного забегая вперед.
Изначально причина, по которой длинный и большой Фильм (или объект) делится на части (серии), как правило, не носила особой смысловой цели – сделать понятнее или выделить главное, однако, по мере того, как в сериалы перестали переделывать большие Объекты, а стали изначально делать сериалы с нуля, одновременно, параллельно делая несколько серий, то у разбивки появилась и особая смысловая нагрузка.
Это относится и к ИТ, где одно дело – разбивка изначально большого объекта, и другое – создание объекта под сериализацию.
Итак, сериализация – это разбивка Данных (Объекта данных) на фрагменты (серии). Главная причина разбивки целого на части, деления на серии (сериализации) – это невозможность или повышенная сложность приема или записи (для зрителей сериалов – просмотра) объекта целиком, за один раз.
Причина, по которой возникает такая сложность, зависит от разных обстоятельств. Для зрителя – более-менее понятно, а для компьютерных сетей они могут быть разными. Например, пропускная способность сетей (ширина канала, размер пакета, надежность и т.д.). Также это может быть размер памяти у передатчика или накопителя, а также некоторые другие, чисто технические причины, которые больше зависят от оборудования, чем от пользователей.
Однако, поскольку любая передача данных создается именно ради конечного потребителя (пользователя, оператора данных), то часть причин для сериализации связана с особенностями восприятия человеком, хотя, конечно, не так как у зрителей сериалов.
Поэтому к причинам сериализации относят также сохранение кроссплатформенности (работа на разных системах и типах данных), масштабируемость, учет структуры данных в базе данных, контроль изменений данных и необходимость работы с фрагментом данных, а не всем объектом.
В этом случае возникает необходимость специального анализа данных, с целью поиска удобных кусков для разбивки. Просто порезать объект на части и потом склеить их – возможно, но не всегда возможно (или даже всегда неудобно).
Точнее, для компьютера, конечно, нет проблемы соединять совсем не связанные с собой куски данных, и иногда такие действия и выполняются. Это называется «бинарная сериализация», когда объект воспринимается просто как набор бит, а деление на фрагменты идёт без учета человеческого восприятия этих фрагментов.
Хотя этот метод считается самым быстрым и экономным, но применительно к использованию в базах данных у него есть ряд недостатков.
При такой сериализации важно знать порядок фрагментов в последовательности, а также должно гарантироваться отсутствие малейших искажений.
Это можно представить, например так:
«Серия_1. «Просто те»»
«Серия_2. «кст для иллю»»
«Серия_3. «страции»»
«Серия_4. «возможностей»
«Серия_5. ««Сериализации».»
Увидели ошибки в такой простой разбивке?
Кроме того, что такую информацию сложно читать и легко пропустить несколько символов, но есть и другие недостатки.
1) Избыточность в виде стандартизированной служебной информации. Нужны не только номера фрагментов, но и служебные символы начала и конца фрагмента и начала конца всего текста, при этом каждый фрагмент не несёт какой-то законченной информации.
Можно возразить, что и при текстовой сериализации тоже есть служебная информация. Например, имена полей. Но имя поля не является «лишней» информацией, оно используется и важно независимо от значения поля.
2) Собрать воедино Объект можно только получив все фрагменты, при этом, даже если получено большинство из них, но не хватает всего нескольких средних –Объект (даже такой простой, как текст) собрать нельзя.
А в текстовой сериализации часть фрагментов даже можно не передавать!
3) Получив небольшую ошибку в одном фрагменте – можно потерять смысл всего текста, в то время как в текстовой при потере фрагмента теряется или искажается только часть информации.
Поэтому сериализация – это не просто разбивка большого объекта, но это целый механизм удобного разбиения Объекта Данных на фрагменты, позволяющий легко и быстро передавать данные и обеспечивающий их быстрое и удобное сохранение и объединение, с минимизацией потерь информации.
Например, по сериалам зрители знают, что обычно новая серия начинается с краткого повторения всех предыдущих, а иногда даже с окончания предшествующей. В ИТ и 1С есть нечто подобное, для улучшения сочетания серий.
Процесс – обратный сериализации – заключающийся в восстановлении разбитых на фрагменты данных – десериализация. И неважно, где происходит это сочетание – в мозгу зрителя или на накопителе сервера.
2. Типы сериализации в применении ИТ
Хотя исторически первым стандартом сериализации является XDR (External Data Representation) – не путать с XDR (Extended Detection & Response)! – стандарт, разработанный совместно Sun Microsistems и Xerox в 1987 году для взаимообменов данными.
Но вообще понятие «сериализации» в применении ИТ массово начинает использоваться только с глобальными сетями передачи данных, а первые текстовые стандарты связаны с развитием Интернета.
Как альтернативу бинарной сериализации, используют текстовую сериализацию, использующую стандарты JSON(1999г.) и XML. Это основные стандарты в ИТ-индустрии, породившие множество формально независимых, но очень близких стандартов, таких как YAML, TOML и некоторые другие.
Стоит упомянуть также, что в многих языках программирования (средах разработки) есть свои собственные типы и стандарты сериализации. В первую очередь, конечно, это Java Serializable, .NET, KOTLIN и другие. Но они также очень похожи на JSON и XML, и скорее являются их версиями и развитиями, чем абсолютно независимыми стандартами.
Есть еще несколько специализированных стандартов относительно узкого применения, например, семейство стандартов GRIB, которое изначально относилось к чисто бинарным типам, а потом получило своё текстовое дополнение, но о них можно прочитать в других статьях, далее мы их не рассматриваем.
На сайте https://www.json.org дается такое разъяснение:
В JSON (JavaScript Object Notation) используются два типа структур:
1. Наборы с ключом. Пары «ключ — значение», такие как запись, структура, таблица, список с ключом, а также словарь, хэщ, именованный список, ассоциативный массив.
2. Упорядоченные наборы. Роль ключа играет номер элемента по порядку в списке. Это реализовано как простой массив, вектор, список или последовательность.
Значением может быть строка в двойных кавычках, число, true, false, null, объект или массив. Тип данных всегда определен. Эти структуры могут быть вложенными.
JSON применяется в веб-приложениях как для обмена данными между браузером и сервером, так и между серверами.
Пример простого файла по стандарту JSON – слева – ключ, справа – значение.
{"name": "William Henry Gates", "age": 79, "worth": 128000000000}.
В общем то размер JSON файла зависит только от количества передаваемых данных, но структура остается довольно простой.
XML (Extensible Markup Language) - расширяемый язык разметки.
Основное здесь – «расширяемый» и «разметки». XML является расширением, развитием и усложнением текстовых стандартов сериализации и за счет использования служебных меток имеет несколько больше возможностей, таких как структуризация (вложенность и иерархия объектов), возможность проверки данных и некоторые другие.
А вот пример простого xml-файла. Здесь в принципе, то же самое, кроме верхней служебной строки (декларации) и уточнения, где заканчиваются данные об элементах, включая вложенность. Видно, что все данные относятся к одному человеку.
<?xml version="1.0" encoding="UTF-8"?>
<name =" William Henry Gates">
<age>79</age>
<worth>128000000000</worth>
</name>
Сложность и размер xml-файла зависит не столько от объема передаваемых данных, а от наличия дополнительных атрибутов. В данном примере их нет.
Главное отличие XML от JSON – это то, что в нём можно задать не только сами значения, но и взаимосвязи между ними, описания представления значений, а также инструкции по обработке передаваемых данных.
Согласно стандарта XML позволяет:
• записывать иерархию — «один подчиняется другому»;
• размечать текст по смыслу от важного к второстепенному;
• хранить типовые данные — скрипты, настройки программ, названия чего-либо;
• размечать текст для машинного обучения;
• хранить результаты работы текстовых редакторов.
XML используется:
• где требуется выделить логическое содержимое документа для обработки;
• в API, когда ответ от сервера поступает в виде XML-файлов.
3. Сериализация в 1С
В системе программы 1С выделяют три основных типа сериализации. Следует это учитывать, так как очень часто под «сериализацией 1С» понимают именно xml-сериализацию, но это только частный, хотя, пожалуй, самый используемый тип сериализации в передаче данных.
Сериализация объекта – используется в пределах одной информационной базы по для сохранения объекта в файл или Хранилище значений по внутренним идентификаторам.
Не служит для обмена между системами. Иногда пользователь и не знает, что использует сериализацию, задавая команды типа ЗначениеВФайл() и ЗначениеИзФайла().
Сериализация XML - преобразование объектов 1С в формате xml, обычно используется при переносе данных между базами и конфигурациями 1С.
Сериализация данных XDTO (XML Data Transfer Objects) – как и следует из названия, является особым типом XML сериализации, который хоть и использует XML-стандарт, но за счет особых механизмов добавляет дополнительные возможности и хотя также используется для обмена между разными системами 1С, но главная его цель - организации обмена между информационными системами разных типов, например, между 1С и web-сервисами.
XDTO является собственным механизмом платформы 1С, поэтому позволяет оперировать данными не в терминах стандарта XML, а прикладными понятиями конфигурации «Сотрудник», «СправочникСсылка» и т.д. Кроме упомянутого в названии стандарта XML, данный тип позволяет работать и с JSON форматами.
Ключевое понятие в XDTO – Фабрика (глобальная фабрика XDTO) – объект встроенного языка 1С, который помогает создавать объекты XDTO.
Создается системой или разработчиком и содержит множество описаний всех типов данных, используемых в системе.
Метод, с помощью которого происходит разбивка данных, так и называется ФабрикаXDTO и его можно открыть и изучить с помощью синтакс-помощника.
Непосредственно для записи/чтения элементов используют метод СериализаторXDTO.
Выбор главы
ЗаписатьJSON
XML ТипЗнч
Глобальный контекст
В типовой конфигурации 1С в разделе Общие/XDTO-пакеты уже имеются созданные пакеты, то есть данные, записанные по специальной схеме, объединяющей 1С и XML.
Можно использовать типовые пакеты, можно создавать свои.
В целом 1С предоставляет достаточно мощные инструменты для обмена данными с другими системами, как семейства 1С, так и сторонними, используя как стандартные механизмы сериализации, так и свои собственные доработки.
Более подробная информация об использовании сериализации уже выходит за пределы базовых понятий, но, надеюсь, представленные общие сведения позволят подойти к изучению конкретных методов уже подготовленным.
Конфигурация
Специалист компании ООО "Кодерлайн"
Дмитрий Сарычев