powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Кеширование данных в 1С
19 сообщений из 19, страница 1 из 1
Кеширование данных в 1С
    #40041465
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос знатокам платформы:

Зашел спор про вставку данных в БД 1С минуя платформу. Прямым SQL-ем.
А именно вставку в строчную часть справочника. Никаких ключей не генерируется. Просто вставка/апдейт 2-х заведома известных ключевых значений. И все это не в бизнес-время, когда юзеров нет.

Аргумент ПРОТИВ : так делать нельзя, потому что "платформа может закешировать" старое значение, в то время, когда физически в БД появится новое, а о чем платформа не знает.

Аргумент ЗА : платформа кеширует только служебные метаданные и не кеширует бизнес-данные на длительный период.
Поэтому внешняя вставка/апдейт может делаться совершенно спокойно, если она не нарушает бизнес-логики.

Кто прав ?
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40041483
L_argo
потому что "платформа может закешировать" старое значение


когда она его и ради чего закэширует? оно активно используется в модуле с повторным использованием возвращаемых значений

аргументы "за" как-то на аргументы не похожи - чего ради вообще это делать, это все ради скорости?
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40041978
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа
L_argo
потому что "платформа может закешировать" старое значение


1. когда она его и ради чего закэширует? оно активно используется в модуле с повторным использованием возвращаемых значений

2. аргументы "за" как-то на аргументы не похожи - чего ради вообще это делать, это все ради скорости?
1. Тема повторного использования значений не раскрыта.
Особенно при ночном выполнении и отсутствии пользователей.
Где почитать про кеширование данных в 1С (первые гуглоссылки уже прочитаны) ?
Как это соотносится с возможностью в 1С выполнения прямых запросов к БД (которые однозначно проходят мимо платформы) ?
Также интересно, как это работает на таблицах с и без поля _Version.
2. Ради скорости. Там миллионы строк с тенденцией к росту.
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40041981
L_argo
Как это соотносится с возможностью в 1С выполнения прямых запросов к БД (которые однозначно проходят мимо платформы) ?


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

L_argo
Также интересно, как это работает на таблицах с и без поля _Version.


version - это вроде для "оптимистических блокировок". совпадают версии в таблице бд и та что у тебя в "новой" версии - записываем, обновляем version, нет - значит опоздали, уже кто-то другой запись поменял
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40041982
соответственно если нет юзеров и фоновых задач работающих с этими данными - можно не заморачиваться

единственно - ваши изменения пройдут мимо механизма версионирования самой 1с. и разборки "какая падла поменяла?!" в бухгалтерии приобретут новый оттенок драматизма...
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043697
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да можно. Только ОЧЕНЬ аккуратно.

А зачем в строчную часть справочника? Пересмотрите архитектуру и заменить в этой части допустим на ссылку через регистр сведений. И пишите в регистр сведений без ограничений скорости.
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043700
Программист 1с
И пишите в регистр сведений без ограничений скорости.


что-то новое в природе - 1с научилась писать в таблицы через объектную модель и не тормозить


Программист 1с
Пересмотрите архитектуру и заменить в этой части допустим на ссылку через регистр сведений.


шило на мыло
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043824
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа,

Обсудим почем запись в регистр сведений идет гораздо быстрее чем в справочник?
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043892
Программист 1с
Неистовый Служитель Культа,

Обсудим почем запись в регистр сведений идет гораздо быстрее чем в справочник?


да, если Вам не сложно - поделитесь

почерпну нового знания
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043973
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа
Программист 1с
Неистовый Служитель Культа,

Обсудим почем запись в регистр сведений идет гораздо быстрее чем в справочник?


да, если Вам не сложно - поделитесь

почерпну нового знания


Для а = 1 по 1000000 Цикл
Об = Справочники.Мой.СоздатьЭлемент();
Об.Наименование = а;
Об.Записать()
КонецЦикла;

//Даже без набора
Для а = 1 по 1000000 Цикл
МенеджерЗаписи = РегистрыСведений.МояЗапись.СоздатьМенеджерЗаписи();
МенеджерЗаписи.МоеПоле = а;
МенеджерЗаписи.Записать();
КонецЦикла;
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40043996
Программист 1с
Неистовый Служитель Культа
пропущено...


да, если Вам не сложно - поделитесь

почерпну нового знания


Для а = 1 по 1000000 Цикл
Об = Справочники.Мой.СоздатьЭлемент();
Об.Наименование = а;
Об.Записать()
КонецЦикла;

//Даже без набора
Для а = 1 по 1000000 Цикл
МенеджерЗаписи = РегистрыСведений.МояЗапись.СоздатьМенеджерЗаписи();
МенеджерЗаписи.МоеПоле = а;
МенеджерЗаписи.Записать();
КонецЦикла;


это все конечно прекрасно, но к текущей задаче какое отношение имеет?
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044022
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача - вставлять сотни тыщ. записей из внешней БД.
И это уже давно и беспроблемно работает.

Но появились скептики, утверждающие, что так делать не TRUE.
Потому возник этот топик.
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044051
L_argo
Но появились скептики, утверждающие, что так делать не TRUE.


аргументация их в чем состоит? платформа закешировала? какие-то "мифы и легенды"...

большой апдейт в рамках большой транзакции, она не закоммитилась - а тут 1с посылает запрос к таблице (с read_committed_snapshot и следовательно она конца транзакции ждать не будет) и вернет то чего через секунду не будет?

так пользователей же нет. чисто теоретическая коллизия имхо
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044085
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Задача - вставлять сотни тыщ. записей из внешней БД.
И это уже давно и беспроблемно работает.

Но появились скептики, утверждающие, что так делать не TRUE.
Потому возник этот топик.
Есть множество запретов в 1с. Но если понимаешь что и зачем делаешь то можно.

Можно ли пилить болгаркой голыми руками, бочку парами бензина? Нуу можно - только надо понимать что делаешь и зачем.
В данном случае могут быть проблемы при некорректной вставке и одновременной записи из 1с и вставки. Может еще где-то.
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044088
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс отладка всех этих действий и кто менял справочник?

Поэтому я бы шел через регистр сведений. Но Вы лучше знаете задачу и возможно только напрямую в mssql вас спасет по производительности.


Но тогда не правильнее было бы в 1с просто подключить внешний источник данных? Ту же табличку отдельно создайте. А при открытии элемента справочника - 1с лезет во внешние данные и выводит пользователю табличную часть.
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044091
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Вопрос знатокам платформы:

Зашел спор про вставку данных в БД 1С минуя платформу. Прямым SQL-ем.

А именно вставку в строчную часть справочника. Никаких ключей не генерируется. Просто вставка/апдейт 2-х заведома известных ключевых значений. И все это не в бизнес-время, когда юзеров нет.

Аргумент ПРОТИВ : так делать нельзя, потому что "платформа может закешировать" старое значение, в то время, когда физически в БД появится новое, а о чем платформа не знает.


Кто прав ?


таки да, 1С кеширует прочитанный объект. Однако, если версия объекта изменилась (поле _version, для MS SQL тип timestamp), то объект перечитывается, иначе считается неизменённым. И тут засада - изменили табличную часть, а юзер нажал "сохранить" в ранее открытом окошке - все изменения пропали.
Выход:
Кто мешает сделать update главной таблицы, чтобы изменилась _Version, например,
Код: sql
1.
2.
update dbo._ReferenceXXXX set _Marked=_Marked
where _IDRRef = ...



Опытным путем установлено, что регистры сведений не кешируются. И можно невозбранно лить в них напрямую. Что крайне ускоряет работу. Имею богатый опыт. В одной конторе уже три года подряд работает фоновое задание, которое берет JSON из с одного http-сервера и обновляет регистр. Раз в 5 минут, около 3К строк. merge на MS SQL. Прямая запись идет около 0.01 сек
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044120
VladimirKr
Опытным путем установлено, что регистры сведений не кешируются. И можно невозбранно лить в них напрямую. Что крайне ускоряет работу.


ускоряет за счет чего? не перебирает кеш?

не факт, что в рамках задачи автора можно будет ограничиться какими-то перечислениями или готовыми ссылками без создания новых чтобы все проапдейтить/вставить - опять новые сущности, опять кеширование. или все измерения строками сделать? а где гарантии, что можно будет уложиться в индекс?

зы автор пишет напрямую - кеш сервера приложений не работает и память ненужным не забивает
зы2 ссылки в кеше насколько я помню со временем протухают
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044218
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неистовый Служитель Культа


ускоряет за счет чего? не перебирает кеш?


Ускоряется за счёт возможности группового изменения записей регистра одним merge/ update/insert, которые в 1с делаются по одной записи.
Единственная групповая операция изменения данных в 1с это удаление записей из регистра сведений (запись пустого набора записей РС)
...
Рейтинг: 0 / 0
Кеширование данных в 1С
    #40044317
VladimirKr
Ускоряется за счёт возможности группового изменения записей регистра одним merge/ update/insert, которые в 1с делаются по одной записи.


ок.

а здесь за счет чего ускорение будет?

авторДля а = 1 по 1000000 Цикл
Об = Справочники.Мой.СоздатьЭлемент();
Об.Наименование = а;
Об.Записать()
КонецЦикла;

//Даже без набора
Для а = 1 по 1000000 Цикл
МенеджерЗаписи = РегистрыСведений.МояЗапись.СоздатьМенеджерЗаписи();
МенеджерЗаписи.МоеПоле = а;
МенеджерЗаписи.Записать();
КонецЦикла;


чтобы уровнять условия допустим мы выключаем в справочнике контроль уникальности... да и вообще получение и автоприращение кода элемента выключаем
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Кеширование данных в 1С
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]