разными буферами Работаем с конкретным paging buffer: • Кластеры данных - data cluster • Объекты общей памяти - shared memory object (начиная с версии 6.40)
objects • Работают на старых версиях • Не поддерживают ссылки • Нет механизма блокировок • Отсутствуют удобные средства мониторинга и использования • Присутствуют только с 6.40 + • Сложнее в реализации
User B Work process 3 •Передача данных между разными программами •Обмен данными между разными пользователями без использования БД •Использование в качестве буфера для уменьшение нагрузки на БД и увеличения скорости чтения данных •Любые комбинации вышеуказанных вариантов DB Buffer (shared memory)
работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран обязательны для Подготовительные операции: • Обязательны для большинства дальнейших операций • Время выполнения всех операций может доходить до 10-ти секунд • В будущем прогнозировалось увеличение времени выполнения Подробнее про приложение
не меняется в течение одного дня Вход в приложение (Login) Подготовительны е операции ~10 секунд Дальнейшая работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран User not depend Еще немного деталей
в фоновом задании • Результат сохраняется в атрибутах объекта shared memory • В процессе развития проекта вынесли туда еще больше алгоритмов Вход в приложение (Login) Shared memory object Дальнейшая работа с приложением … Функция 1 Функция 2 Функция 3 Функция 4 Функция N Начальный экран Подготовительн ые операции 30+ секунд
Ограничение по памяти • (-) Shared memory на каждой инстанции аппликейшн сервера – своя • (-) Скорость чтения атрибутов класса shared memory медленнее примерно 15-20 %, чем скорость чтения внутренних атрибутов классов (хэштаблиц) • (+) Возможность иметь несколько разных инстанций • (~) Устаревание версий • (~) Блокировки не кумулятивные • (~) Решение оказалось достаточно удачным, что некоторые алгоритмы сильно не оптимизировали • (~) Пришлось сделать свой монитор
пользователями или в качестве хранения сложнодобываемых данных •C shared memory лучше работать с помощью объектов •Если правильно приготовить, Shared memory реально помогает •Готовьте Shared memory правильно!
это класс, имя которого и будет именем области. Класс должен наследоваться от CL_SHM_AREA. • Создаем класс конструктор области – он должен содержать интерфейс IF_SHM_BUILD_INSTANCE и иметь реализацию метода построения IF_SHM_BUILD_INSTANCE~BUILD. • Создаем класс объекта shared memory – в его настройках ставим флажок «Использовать общую память». Атрибуты именно этого класса будут использоваться для хранения данных. Чаще всего этот класс совмещают с классом конструктора из предыдущего пункта. • Теперь можно получить shared memory c помощью методов класса области attach_for_read/attach_for_write/attach_for_update