Кэшированные справочники

5 8

В DIRECTUM 4.6 появились кэшированные справочники, которые сохраняют свои данные на локальном диске и загружаются с сервера только при обновлении, что дает ускорение работы при частом обращении к данным таких справочников.

Возможность использования справочника в режиме кэширования определяется в параметрах типа справочника.

Значение по умолчанию – «Нет».

Для работы с кэшированными компонентами на ISBL используются функции CreateCachedReference/СоздатьКэшированныйСправочник.

Применение: рекомендуется использовать для редко изменяемых справочников в следующих вычислениях:

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

Важно: нельзя выполнять визуальные действия и действия, связанные с изменением данных. К таким действиям относятся, например, создание форм и представлений справочника, закрытие набора данных, изменение набора данных, например, использование методов AddWhere и DelWhere, удаление, добавление и/или изменение записей, изменение локальной сортировки (свойство Indexed).

При первом создании кэшируемого справочника данные сохраняются на локальный диск и впоследствии обновляются автоматически, по мере внесения изменений в справочник. Информация о необходимости обновить данные на локальном диске того или иного компьютера, хранится на сервере сеансов, запрашивается с рабочих станций не чаще, чем через период, заданный в установке SharedComponentCheckPeriod, по умолчанию 10 секунд.

            На текущий момент кэшированными являются системные справочники (Пользователи, Приложения-редакторы, Роли и т.д.) и справочник Работники.

Константин Халявин

Тут важно знать, что признак необходимости обновления кэшированного справочника определяется через сервер сеансов. И если выполнить его перезагрузку, то все локально сохраненные данные тоже будут обновлены.

Андрей Куров

Интересно, а есть какие-либо рекомендации по установке кэширования справочников? Почему бы не взять и не закэшировать все сколько-нибудь большие справочники - Организации, Подразделения, Работники? И почему это не сделано, интересно, по умолчанию?

Единственная проблема, как я понимаю, со справочником РКК - при достаточно большом потоке документов, он получается будет обновляться каждые несколько минут и даже чаще.

Дмитрий Чепель
Интересно, а есть какие-либо рекомендации по установке кэширования справочников? Почему бы не взять и не закэшировать все сколько-нибудь большие справочники - Организации, Подразделения, Работники? И почему это не сделано, интересно, по умолчанию?

Андрей, ответы на эти вопросы уже есть в основном посте:

1. Справочник должен редко меняться, иначе смысл кэширования пропадает - он слишком часто будет обновляться.

2. Кэширование имеет смысл только для справочников, с которыми целиком (не с отдельными записями, а со всеми) выполняется невизуальная работа. Также требуется специальное создание экземпляра справочника через функцию CreateCachedReference. Т.е., если просто установить параметр "Справочник может быть кэшированным" = Да, но не использовать его правильно в разработке - эффект будет нулевым.

P.S. Для Работников кэширование включено.

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

А, прошу прощения, я то думал, что это у пользователей кэшируется.

 

P.S. Для Работников кэширование включено.
На текущий момент кэшированными являются только системные справочники

Согласно справке разработчика 4.6.1, работники не относятся к системной разработке.

Дмитрий Чепель
Согласно справке разработчика 4.6.1, работники не относятся к системной разработке.

С этим согласен, тоже обратил на это внимание. Если интересно посмотреть список всех типов справочников, для которых включено кэширование, и у вас установлена версия 4.6 или 4.6.1 - выполните SQL-запрос:

select * from MBVidAn where AddParams like '%РАЗДЕЛЯЕМЫЙСПРАВОЧ=ДА%'

Ксения Останина
P.S. Для Работников кэширование включено.

Спасибо, исправила.

Что то не совсем понятны детали.

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

Я бы еще понял утверждение, что локальный пользователь будет работать быстрее. Так как справочники большие и тащить все данные по сети тяжко. Это и линия напрягается и серверу тяжко. И тащить конкретную запись гораздо быстрее и я думаю более оправданно нежили обновлять целый справочник каждые нацать секунд. Потом файл может быть не маленький, т.е. вы тратите ресурсы системы такие как - доступное дисковое пространство, оперативная память(надо ведь каду то его грузить), процессорное время(надо ведь обновлять и я так понял весьма часто(возьмите справочник по 100тыс. записей.))

Проще отдельную талбицу SQL создать и там искать(что видимо правильные разработчики DIRECTUM и сделали и другим посоветовали делать в отчетах) чем пользоваться непонятно чем. Там и механизмы поиска в нутри текстов можно легко прикрутить. Microsoft уже это сделал. И данные структурированые лежать будут и индексы есть.

У Директума уже прекрасно написан и работает справочник. Так как вы работаете не визуальном режиме, значит вы знаете, что вы ищите и вы уже добавите where. А значит подтянется не все, а только то что нужно. Есть механизм ограничения по количеству подтягиваемых полей(Preloaded). Т.е вы получаете нужную вам выборку данные только по указанным полям(я думаю это влияет на размер пакета данных и размер локального объекта справочинка), это займет микросекунды и ходите вы по ней туда сюда сколько нужно. И точно знаете, что вы работаете с актуальными данными.

Зачем вы себе ищете проблем на ровном месте. В директуме и так ошибок хватает. Чуть тронь по серьезнее и оглянуться не успеешь как тебя начальник замешает за не соблюдения сроков. Я не знаю как в версии 4.6.1 но в 4.5.1. они не смогли организовать нормальую работу с кешем документа, а вы хотите целый справочник. Я устал уже тестить каждую функцию каждую мелочь ...(это всегда страшно, не предсказуемо). У клиента только и успеваешь чистить локальные кэши данных. А вы хотите на сервере такое устроить.

Хотите повечеровать, по упрожняться в коде, побыть бесплатным тестером - пользуйтесь.

Иван Чурбаков

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

Авторизуйтесь, чтобы написать комментарий