Одними из современных технологий быстрой разработки распределённых систем широкого пользования, ориентированных на активное использование баз данных (приложений электронной коммерции и различных web-порталов) являются программная платформа и язык Java, а также альтернативная ей платформа Microsoft.NET.
По сравнению со средствами разработки, ориентированными на одну платформу (например, Access и Visual Basic), Java и .NET являются кроссплатформенными, что позволяет архитектору распределённой системы более гибко выбирать аппаратное обеспечение и операционную систему компонентов распределённой системы в зависимости от их производительности, стоимости и надёжности.
Идея обеих платформ заключается в компиляции программного кода в некоторый промежуточный код (байт-код), который исполняется программным модулем, адаптированным под конкретную аппаратную платформу (виртуальной машиной).
Точно так же, как производительность персонального компьютера определяется не только его компонентами, но и производительностью его системной шины, так и производительность распределённой системы определяется также эффективной передачей данных между её компонентами (в простейшем случае, между клиентом и сервером).
Объектом данного исследования является процесс передачи табличных данных между компонентами распределённой системы. Под табличными данными понимается массив записей таблицы — кортежей — каждый из которых представляет собой совокупность значений атрибутов n-мерного отношения (где n-количество атрибутов или полей записи). Атрибуты (поля) и их тип одинаков для всех записей массива.
Критерием эффективности передачи табличных данных является размер служебных данных, передаваемых между узлами распределённой системы. Встроенные механизмы обеих программных платформ позволяют передавать данные различной структуры. Поэтому вместе с основной информацией (записями) передаются также служебные данные (по сути, данные о данных). Целью исследования является оценка размера служебных данных относительно размера основных данных и поиск путей уменьшения этого размера. Актуальность этой задачи заключается в увеличении полезной пропускной способности сети, т.е. в передаче большего количества полезной информации за меньшее время.
В обеих программных платформах элемент табличных данных представляется структурным типом, содержащим набор полей заданных типов атрибутов. При передаче записи по сети встроенными механизмами Java и .NET структурный тип сохраняется в последовательность байт. В заданную последовательность помимо полезной информации включается также:
Информация о структуре типа заданной записи (либо ссылка на эту информацию в уже сохранённых данных)
Для полей строкового типа — дополнительная информация о длине строки и/или типе строки
Для полей других составных типов (массивы, изображения) — информация о структуре типа соответствующего объекта и другая информация.
В результате экспериментального анализа для платформы .NET было установлено, что информация о структуре типа заданной записи (1) представляется ссылочной информацией, занимающей 14 байт, в то время, как аналогичная информация в платформе Java занимает 6 байт (в соответствии с документацией к программной платформе Java).
Поскольку строка в Java и .NET также является объектным типом, дополнительная ссылочная информация о её типе также сохраняется в поток. Более того, размер дополнительной информации о строке в .NET в 2 раза больше, чем в Java (6 и 3 байт соответственно). В сумме вместе с информацией о типе размер служебной информации для строки составляет 9 байт для Java и 20 байт для .NET.
С целью оценки доли служебной информации в общем размере передаваемых данных с учётом вышеприведенных характеристик было проанализировано 4 корпоративных схемы данных (состоявших из 10-100 таблиц различной структуры).
При следующих предположениях:
строки переменной длины заполнены полностью;
для полей изображений и бинарных массивов учитывалась только длина информации о типе объекта и не учитывалась любая другая информация, характеризующая тип (как, например, длина строки для строкового типа);
средние размеры служебной информации по одной базе данных для платформы .NET составили 60-80% полезной информации записи. Это означает, что объём информации, передаваемый по сети, при использовании встроенных механизмов передачи табличных данных возрастает в среднем примерно в 1,5-2 раза.
Для сравнения, аналогичный размер для программной платформы Java составил 20-40% полезной информации записи.
Так как платформа .NET является гибкой и расширяемой как на прикладном, так и на системном уровне, для уменьшения размера служебной информации может быть использовано программное обеспечение, «подменяющее» стандартные встроенные механизмы сохранения структурных данных в поток как минимум для табличных данных (частный случай). Это позволит не только сократить размер служебных данных до уровня аналогічного в Java, но и сократить время сохранения объекта в поток, которое в .NET также больше, чем в Java, в 2-3 раза. Таким образом, существует возможность увеличить не только полезную пропускную способность сети, но и производительность алгоритмов сохранения данных в последовательную форму (алгоритмов сериализации/десериализации).