Сохранение в поток (постановка)

Материал из GedeminWiki
Перейти к: навигация, поиск



Хочется ускорить сохранение в поток. Цель: как минимум десятикратное ускорение и уменьшение размера файла. Беглый анализ показывает, что основной проблемой сохранения сейчас является использование рекурсии + бизнес объектов. Т.е. сейчас работает так:

1) начинаем сохранять запись определенного типа; 2) создаем клиент датасет и переносим в него данные полей сохраняемой записи; 3) анализируем поля и для полей ссылок создаем экземпляры бизнес-объектов соответствующего типа и рекурсивно вызываем процедуру сохранения в поток, т.е. переходим к п. 1;

таким образом, в процессе сохранения объект одного и того же типа может создаваться неограниченное число раз.

Итак, первый шаг -- мы отказываемся от рекурсии. А это значит, что мы будем повторно использовать объект одного типа, если ранее уже такой встречался. Точнее, рекурсия все же будет, но при сохранении объекта определенного типа, от которого зависит сохраняемый в данный момент времени объект, мы будем попадать (рекурсивно) в его же код! Следует быть осторожным и контролировать повторное использование ресурсов при такой организации кода.

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

отказавшись от бизнес объектов приходится брать на себя анализ структуры базы данных и по главной таблице бизнес объекта (GetListTable) находить все таблицы связанные связью один-к-одному, а так же таблицы элементов множества. тут возникает интересный момент. у нас главная таблица для любого документа -- это gd_document, хотя специфические его данные хранятся в присоединенной таблице. При анализе связей таблицы gd_document находим 216 ссылающихся таблиц. Пока не ясно, стоит ли с этим смириться или каким-то образом отсекать таблицы, связанные с gd_document, но не имеющие отношения к сохраняемому бизнес объекту.

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

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты