oess_1: Что такое ObjESSty

Введение

ObjESSty (Object Entity Serialization & Stability) -- это инструмент для сериализации и долговременного хранения сложных C++ объектов. ObjESSty включает в себя средства для сериализации/ десериализации C++ объектов в двоичное, платформо-независимое представление. Так же в состав ObjESSty входит небольшая, встраиваемая система долговременного хранения. Это не БД в традиционном смысле этого слова. Более правильно было бы называть эту БД восстановочной.

Основная идея в ObjESSty -- это необходимость описания схемы данных на специальном языке и объявление сериализуемых типов производными от специального класса oess_1::stdsn::serializable_t. Все остальное -- задача ObjESSty. По описанию схемы данных автоматически генерируется вспомогательный код, который и выполняет сериализацию/десериализацию.

История

История ObjESSty началась в 2002 году, когда для нескольких проектов потребовался простой инструмент для сохранения объектно-ориентированной восстановочной информации. Тогда была начата реализация простого объектного хранилища. Главной идеей было то, что схема данных (т.е. описание структуры сохраняемых в хранилище объектов) должна была описываться отдельно на специальном языке описания данных -- DDL. Это должно было позволить:

Так же предполагалось, что на момент создания ObjESSty, восстановочная БД должна быть встраиваемой, но со временем возможно развитие ObjESSty до уровня клиент-серверной БД. Поэтому, БД ObjESSty проектировалась так, чтобы в ней были компоненты, предназначенные только для клиентов БД (см.пространство имен oess_1::db::cln), и компонент, предназначенные только для серверной части БД (см.пространства имен oess_1::db::impl::db_content, oess_1::db::storage, oess_1::db::site).

Интересно, что первоначально средства сериализации данных входили в состав "серверной" части БД. Т.е. казалось, что их можно использовать только для сохранения объектов в БД. А взаимодействие между клиентом и сервером планировалось делать через вручную запрограммированные преобразования запросов/ответов в двоичный поток. Но вовремя удалось заметить, что получившийся инструмент по сериализации сложных C++ объектов можно применять и для сериализации запросов/ответов между клиентами и сервером. Тогда этот инструемент был выделен в отдельные пространства имен (oess_1::stdsn, oess_1::scheme). Более того, со временем оказалось, что этот инструемент может широко использоваться и без восстановочной БД.

Текущее состояние

На данном этапе ObjESSty является проектом, предоставляющим следующие инструементы.

1. Средства преобразования данных из двоичного представления конкретной аппаратной архитектуры (big-endian, little-endian) в двоичное big-endian представление (oess_1::io).

2. Средства для сериализации/десериализации сложных C++ объектов (oess_1::stdsn, oess_1::scheme). Поддерживается одиночное и множественное наследование сериализуемых типов, атрибуты типов char (signed, unsigned), short (signed, unsigned), int (signed, unsigned), float, double, std::string. Так же поддерживаются одномерные вектора примитивных или сериализуемых типов. Поддерживаются STL-контейнеры vector, list, deque, set, multiset, map, multimap в качестве типов атрибутов (элементами контейнера должны быть примитивные или сериализуемые типы). Сериализуемые атрибуты могут быть так же указателями на сериализуемые типы.

3. Средства долговременного хранения данных в восстановочной БД (oess_1::db). Поддерживаются одноуровневые (без вложенных) транзакции с возможностью отката. В восстановочной БД сохраняются сериализуемые объекты. Для объектов поддерживаются операции создания в БД, загрузки из БД, обновления в БД и удаления из БД. При обновлении объект может изменить свой размер. Средств поиска в БД или индексации содержимого БД нет.


Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:37 2006. Создано системой  doxygen 1.4.7
Hosted by uCoz