Архитектуры ООСУБД. Анализ реализаций

Инициализация заново создаваемого элемента данных на основе существующего элемента


В C++ запрещается наличие в одном адресном пространстве двух одноименных классов с разными схемами организации памяти. Однако в данном случае оказывается необходимым именно это, нужен доступ к старым данным при создании нового объекта. Имеется несколько способов достижения желаемого результата, один из которых используется в инструментальном средстве эволюции схем ObjectStore и состоит из трех шагов.

  • Произвести эволюцию схемы для добавления нового элемента данных. Инициализировать его по умолчанию нулем. На этом шаге не удалять старый элемент данных.
  • Запустить относительно простую пользовательскую программу, которая находит в базе данных все экземпляры с измененной схемой и инициализирует новый элемент данных значением старого элемента данных. Здесь имеется несколько вариантов:

    • использовать объектный курсор;
    • производить навигацию по специализированным структурам данных приложения;
    • выполнять это действие инкрементно, при первом обновлении объекта;
    • объединить действие с шагом 1 процесса эволюции путем использования функции преобразования, которая будет автоматически вызываться в процессе эволюции схемы для каждого встреченного кандидата на эволюцию.

  • Последний шаг заключается в запуске процесса очистки, удаляющего старый элемент данных; эта очистка может производиться в любое удобное время, поскольку с логической точки зрения это не требуется, а лишь позволяет освободить память.



    Содержание раздела