RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Постраничная загрузка данных в представлениях

Часто возникают вопросы, чем отличается новый механизм постраничной загрузки данных в представлениях в DocsVision 4.5 от ранее существовавшего механизма порционной загрузки. Постараюсь пояснить.

Глобальных преимуществ у нового механизма два. Первое - это производительность.

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

1) Сервер получает запрос на чтение данных представления
2) В базе данных вызывается хранимая процедура, которая строит выборку по всем 100 000 карточек, вычисляет по ним агрегации
3) Результат выполнения процедуры возвращается серверу. Сервер начинает обрабатывать все 100 000 записей, проверяя права на каждую из них. Записи, на которые нет прав, выкидываются из выборки. Оставшиеся записи (на которые есть права) складываются в курсор (временный файл или таблицу в базе).
4) Как только в курсоре оказывается 100 записей, выборка закрывается, результат возвращается клиенту
5) При получении запроса на очередную порцию записей - она вычитывается из готового курсора, и возвращается клиенту.

Новый алгоритм в версии 4.5:

1) Сервер получает запрос на чтение данных представления
2) В базе данных вызывается хранимая процедура, которая возвращает только идентификаторы обрабатываемых карточек (100 тысяч записей). Сервер проверяет права на каждую из них. Записи, на которые нет прав, выкидываются из обработки.
3) В базе данных вызывается хранимая процедура, которая строит выборку полных данных только по 100 карточкам (!), вычисляет по ним агрегации
4) Выборка по 100 карточкам возвращается клиенту
5) При получении запроса на очередную порцию записей (новую страницу) - повторяются пункты 3-4.

Экономия:

1) Не вычисляются агрегации для 100 000 карточек (очень трудоемкая операция)
2) В базе данных (временных файлах) не расходуется место для хранения результатов представления.

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

0 коммент.:

Отправить комментарий