В режиме «1С:Предприятие». Теория: устройство кеша. Обычный кеш
В режиме «1С: Предприятие» Запустим «1С: Предприятие» в режиме отладки и проверим работу нового обработчика события ОбработкаПроведения, перепроведя все документы Оказание услуги. В результате все работает точно так же, с точки зрения пользователя, но проведение документов организовано методически правильно и более эффективно с точки зрения доступа к данным.
Теория: устройство кеша В разделе «Теория: особенности использования ссылочных данных» на стр. 413 мы упомянули о том, что в платформе есть некий кеш, который хранит в себе данные объектов, читаемых из базы данных. Теперь расскажем о работе этого механизма подробнее. Система «1С: Предприятие» использует механизм кеширования данных объектов, считанных из базы данных при использовании объектной техники. Таким образом, для получения реквизитов какого-либо объекта через ссылку выполняется обращение к кешу объектов, расположенному в оперативной памяти. Кеш объектов состоит из двух частей: транзакционного кеша и обычного кеша. В зависимости от того, происходит ли обращение в рамках транзакции или нет, в действие вступает тот или иной кеш (рис. 14. 33). Все данные, находящиеся в кеше, предназначены только для чтения (ReadOnly). Таким образом, чтение любых данных, получаемых через ссылку, выполняется только через кеш объектов, а запись – механиз- мами самих программных объектов. Рис. 14. 33. Кеш объектов
Обычный кеш Если при обращении к обычному кешу требуемых данных в нем нет, то выполняется чтение данных объекта из базы данных и сохранение их в кеше. Уникальным идентификатором для кеша в данном случае будет являться ссылка на объект базы данных. Поэтому данные каждого считанного объекта могут существовать в кеше в одном из двух видов: либо все данные объекта, либо представление объекта.
Таким образом, если мы обратимся к кешу для получения представ- ления объекта и в кеше есть информация для нашей ссылки, данные будут взяты из кеша (если в кеше весь объект, нужное представление будет получено из данных объекта). Если в кеше нет информации для нашей ссылки, из базы данных в кеш будут считаны только поля, необходимые для формирования представления объекта. Если мы обратимся к кешу для получения реквизита объекта и в кеше есть информация для нашей ссылки, дальнейшие действия будут зависеть от того, что находится в кеше. Если в кеше весь объект, значение реквизита будет получено из кеша. Если в кеше представление объекта, оно будет удалено из кеша, и в кеш будут считаны все данные объекта. Если же при получении реквизита объекта в кеше нет информации для нашей ссылки, из базы данных будут считаны все поля объекта. Считанные данные будут находиться в кеше до тех пор, пока не наступит одно из следующих событий: считанные данные будут вытеснены из кеша другими считан- ными данными других объектов (переполнение кеша); при очередном обращении к кешу окажется, что считанные дан- ные были изменены в базе данных; закончится интервал времени в 20 минут. Все считанные данные помещаются в последовательную очередь, и, поскольку объем кеша ограничен, наиболее старые данные будут вытесняться из кеша последними считанными. При повторном обращении к кешу за данными уже считанного объекта будет анализироваться интервал времени, прошедший с момента появления данных в кеше. Если обращение происходит в пределах 20 секунд после посту- пления данных в кеш, данные считаются верными (валидными). Если интервал превысил 20 секунд, будет выполняться проверка на соот- ветствие версии данных, хранящихся в кеше, версии данных, находя- щихся в базе данных.
Если окажется, что версии данных не совпадают (т. е. произошло изменение данных в базе данных), данные, находящиеся в кеше, будут удалены из него, и будет выполнено повторное считывание данных из базы данных. Начиная с этого момента, идет отсчет следу- ющего 20-секундного интервала валидности этих данных. Кроме всех вышеперечисленных событий считанные данные будут удалены из кеша по истечении 20 минут после их последнего считы- вания из базы данных. Таким образом, при последовательном выполнении двух операторов (листинг 14. 43), где Номенклатура – это ссылка на объект справоч- ника, на выполнение второго оператора будет тратиться гораздо меньше времени, поскольку в первом случае будет выполняться обращение к базе данных, а во втором – чтение из оперативной памяти (кеша объектов).
листинг 14. 43. Последовательность операторов
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|