Синхронизация данных 1С с NoSQL базами данных (Redis, MongoDB)
При интеграции высоконагруженных порталов с 1С возникают проблемы:
- Классическая реляционная база 1С перегружена миллионами GET-запросов на чтение остатков и цен.
- Блокировки таблиц СУБД при одновременном обновлении корзин покупателей интернет-магазина.
- Необходимость хранения неструктурированных JSON-документов и логов большого объема.
- Таймауты ответов при прямых запросах к СУБД 1С в часы пик.
1. Архитектура CQRS и кэширования: 1С + Redis
Для разгрузки системы используется разделение команд и запросов (CQRS):
- Запись (Command): Проведение документов и изменение остатков выполняется в 1С.
- Событие изменения: 1С асинхронно пушит измененный остаток в оперативный in-memory кэш Redis.
- Чтение (Query): Сайт, мобильные приложения и микросервисы запрашивают остатки из Redis со скоростью < 2 мс, не обращаясь к базе 1С.
2. Запись остатков номенклатуры в Redis через REST/Web API (или Redis HTTP Gateway)
&НаСервере
Процедура ЗаписатьОстатокВRedis(Артикул, Количество, СкладID)
// Подключение к Webdish / Redis HTTP Proxy (порт 7379) или микросервису-шлюзу
HTTPСоединение = Новый HTTPСоединение("redis-gw.company.ru", 7379,,,, 5);
КлючКэша = СтрШаблон("stock:%1:%2", СкладID, Артикул);
Путь = "/SET/" + КлючКэша + "/" + Формат(Количество, "ЧГ=0");
HTTPЗапрос = Новый HTTPЗапрос(Путь);
Попытка
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Исключение
ЗаписьЖурналаРегистрации("Redis_Sync", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры3. Экспорт каталога товаров в MongoDB через REST API
&НаСервере
Процедура СохранитьТоварВMongoDB(ДанныеТовараСтруктура)
HTTPСоединение = Новый HTTPСоединение("mongo-api.company.ru", 443,,,, 10, Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/api/v1/databases/catalog/collections/products");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("api-key", "MongoSecretKey123");
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ДанныеТовараСтруктура);
HTTPЗапрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
КонецПроцедуры Частые вопросы (FAQ)
Как подключить 1С к Redis напрямую по нативному протоколу TCP (RESP)?
Напрямую через встроенные объекты 1С подключиться по raw TCP сокету невозможно без внешних Native-компонент (C++) или брокеров/шлюзов (Redis REST API, Webdish, KeyDB).
Как инвалидировать кэш в Redis при удалении или пересчете документа в 1С?
В подписке на событие ПриЗаписи/ПередУдалением документа отправляйте команду DEL stock:<Склад>:<Артикул> или устанавливайте TTL ключа (EXPIRE) на время актуальности.
Зачем использовать MongoDB совместно с 1С?
MongoDB идеально подходит для хранения сырых логов интеграций, аудита действий пользователей, истории корзин покупателей и неструктурированных атрибутов товаров маркетплейсов.
Как обеспечить сохранность данных в Redis при перезапуске сервера?
Настройте механизмы персистентности Redis: периодические снимки RDB (snapshots) и ведение append-only журнала транзакций AOF (Append Only File).