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

  35790931     

Изменение классификации экземпляров


Изменение классификации означает, что некоторый существующий листовой класс (не имеющий подклассов) подвергается рефакторингу путем введения нескольких подклассов. Каждый существующий экземпляр назначается в один из подклассов на основе критерия, задаваемого приложением. Этот процесс снова состоит из трех шагов.

  • Во-первых, пользователь добавляет в свою схему новые подклассы. Каждый новый подкласс просто включает базовый класс без добавления к нему чего бы то ни было. Определение базового класса не изменяется.
  • Далее пользователь пишет и запускает программу, которая анализирует каждый экземпляр базового класса, выбирает некоторый подкласс и изменяет тип экземпляра, используя вызов функции ObjectStore изменения типа; в этот момент не производятся никакие изменения персистентной схемы объекта, так что все указатели, ссылающиеся на объект с измененным типом, остаются действующими.
  • Наконец, базовый класс и подклассы изменяются в соответствии с их целевыми определениями. Этот шаг может включать удаление элементов данных в базовом классе и добавление некоторых из них в качестве элементов данных подклассов. После компиляции новой схемы пользователь запускает процесс эволюции схемы.

    Многие сценарии эволюции схемы могут быть обслужены путем непосредственного вызова инструментального средства эволюции схем ObjectStore. Это средство обеспечивает нахождение всех объектов, их изменение, перемещение их при необходимости в другие страницы и исправление значений и типов указателей. Подробности сценариев, для которых не требуется писать код на C++ для эволюции схемы, лучше всего описаны в руководстве ObjectStore Advanced C++ API User Guide [2], к которому отсылаются заинтересованные читатели.

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

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



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