Понятие таблицы в памяти Назад В начало Вперед

При кодировании бизнес-процессов приходится разрабатывать сложные алгоритмы, которые неоптимально ложатся в структуру реляционной БД. Подходы к решению проблем такого рода существуют в самих СУБД, что приводит порой к нарушению различных нормальных форм.

К таким мерам можно отнести:

Однако, как известно, эти меры помогают далеко не во всех случаях. К тому же они сопряжены с лишними накладными расходами и с ухудшением скоростных характеристик на некоторых режимах. Для обеспечения работы со сложными запросами к БД, в которые могут входить несколько таблиц, связанные реляционными связями, с разнообразными критериями усечения выборки и сортировки результирующего множества в SQL-серверах существует механизм курсоров. При этом SQL-сервер старается оптимизировать выборку данных в курсор (слепок данных). После этого, выборка данных из курсора осуществляется по уже подготовленным данным. В SQL-серверах существует также понятие view, что можно считать структурой, аналогичной курсорам, однако имеющим другой юридический статус.

В Атлантис существуют понятия логической таблицы, внешней выгрузки и временных таблиц. Логическая таблица представляет из себя совокупность таблиц, связанных или не связанных реляционными отношениями, ограничений (bounds и condition), полей и вычисляемых выражений. Таблицы, входящие в логическую, называются узлами реляционного графа.

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

Для решения указанных задач вводятся понятия "таблица в памяти" и "индекс в памяти". Структура таблицы в памяти не может изменяться в процессе работы. Т.е. не допускается добавление или удаление таблиц и полей. Разрешается накладывать дополнительные фильтры и снимать их. Допускается менять порядок сортировки таблицы в памяти.

Использование таблиц в памяти позволит решить несколько задач:

Имеются следующие уровни видимости таблиц в памяти на этапе выполнения программы:

Механизм закачки данных в таблицу в памяти возможен несколькими способами:

Независимо от способов закачки данных в таблицу в памяти, измененные данные могут либо быть выброшены, либо внедрены в БД, с применение транзакции или без.

Для полной совместимости с обработкой данных в БД, при обработке данных в памяти транзакции отрабатываются прозрачно. Это значит, что если идет смешанная обработка данных в транзакции, часть из которых размещена в памяти, а часть в БД и происходит откат транзакции, то данные востанавливаются к началу транзакции как в памяти, так и в БД. Соответственно, при успешном завершении транзакции изменения фиксируются как в БД, так и в памяти.

При таком подходе вызов функции flush внутри транзакции никак не влияет на транзакцию, просто транзакция в памяти и БД идут параллельно. Особенностью можно считать лишь то, что если есть обрамляющая транзакция, то использование флага mfTransation не приводит ни к каким действиям, так как в Атлантис транзакция может быть только одна.

Более сложные реляционные структуры реализуются через логическую таблицу и совокупность таблиц в памяти.

Логическая таблица может использовать глобальные таблицы в памяти (с точки зрения конкретного клиента) как кэш каталогов, подключая одну и туже таблицу в памяти в разные логические таблицы.

Версия

Атлантис 5.00.04.