Update: 19.07.2024
Проект трансформировался и теперь называется 1C#.
Репозиторий проекта: 1C# — платформа для разработки серверных приложений
Краткое описание идеи (видео на 3 минуты): 1C# in 3 minutes
Основная цель Z: увеличение производительности и расширение функциональных возможностей приложений, разработанных на платформе 1С:Предприятие 8. Эти цели достигаются за счёт тесной интеграции Z и 1С на уровне структур хранения данных, а также использования в полной мере возможностей Microsoft SQL Server и .NET Framework 4.5.
— регистрация изменений данных объектов 1С:Предприятие 8 (SQL Server Change Tracking);
— публикация изменений в виде сообщений (Microsoft Message Queuing);
— управление подписками на сообщения;
— сериализация/десериализация сообщений;
— трансляция сообщений при несовпадении схем данных источника и получателя;
— загрузка сообщений в базу данных приёмника (подписчика);
Технология SQL Server Change Tracking позволяет минимизировать нагрузку на систему при одновременном увеличении производительности операций регистрации изменений. Технология была специально разработана для использования в сценариях синхронизации и интеграции данных с учётом обеспечения макимально возможной производительности. Использование Change Tracking полностью исключает возникновение ожиданий на блокировках при одновременном выполнении операций записи и чтения изменений.
Расширяемость Z-Integrator позволяет создавать высоко производительные решения по интеграции с 1С:Предприятие 8 любого уровня сложности, используя всю мощь .NET Framework и SQL Server.
Очень интересно решение для однотипных баз. Жаль требования 1С к свой лицензионной политике не разрешает такие вещи, что, конечно, не справедливо, когда у организации куплено такое ПО как MS SQL Server. Интересно, а как решаются коллизии данных? по тем же правилам, что и в 1С? В описании ничего такого не нашел, получается нельзя построить по правилу, когда подразделение меняется что-то в своих документах, то это в приоритете?
(1) ifal,
Реализована следующая стратегия разрешения коллизий:
1. Всегда применяется правило «кто последний, тот и выиграл». То есть, если в базу приёмник приходит сообщение обновления, то версия записи в приёмнике не анализируется, она просто перезаписывается. Таким образом считается, что источник всегда последний и он всегда прав. Какой из узлов обмена А или В в данный момент является источником или приёмником определяется по направлению движения для конкретного сообщения обмена, которое обрабатывается в данный момент времени. Если сообщение движется из А в В, то А — это источник, а В — приёмник и, соответственно, наоборот.
2. Если из источника в приёмник приходит сообщение вставки новой записи (insert), а в приёмнике запись с такими ключевыми полями уже есть, то источник снова считается последним и, соответственно, победителем в разрешении коллизии — insert превращается в update. Такая ситуация может возникнуть, например, тогда, когда в приёмнике завели цену в регистр сведений «Цены номенклатуры», а в источнике тоже завели по тем же ключевым значениям (новым в этом момент для источника) цену. В приёмник «летит» insert, но там уже есть такая запись — ошибка дублирования ключа превращается в обновление.
3. Если из источника в приёмник «летит» update, но там нет такой записи, например её удалили или её там вообще никогда не существовало (такую коллизию называют update-delete), то update превращается в insert — запись успешно добавляется в приёмник.
(1) ifal,
Правила разрешения коллизий бывают очень сложными. Зачастую они сильно зависят от бизнес-логики прикладного решения. В каждом случае нужно разбираться отдельно. Предложения по добавлению настроек какой-то более или менее типовой логики разрешения коллизий приветствуются =)
(0), Изобретение велосипедов — деятельность вполне достойная. Зачастую — необходимая.
couchdb — это позволить направить вашу энергию в мирное русло.
Без этого сложно понять условия задачи и математику альтернативных решений, но зачем результаты лабораторной работы помещать в production?
Почитайте про репликацию
В 2014-15 годах, я потратил более 2 тыс. человекочасов на собственный движок обмена, но познакомившись с couchdb — выкинул бОльшую часть проделанной работы на помойку, задействовав простые, изящные и современные технологии.
Вот интересно было узнать, цену вопроса не для ознакомления)
А то от количества нулей можно !!!!
(5) Константин С.,
Выпуска платной версии не планируется. Планируется создание более или менее удобного инструмента для реализации проектов по интеграции на стыке технологий 1С:Предприятие 8 + .NET Framework (C#) + MS SQL Server. В том числе с учётом SOA (service-oriented architecture). Соответственно ответ такой: присылайте свои требования по проекту — дам оценку.
(4) unpete,
Я прошу прощения, но я совсем не понял Ваш комментарий. PR couchdb ? Сравнение тёплого с мягким ? По моему упоминание SQL Server Integration Services было бы более к месту. Кроме того, моя публикация больше про интеграцию, чем про репликацию.
Подписался
А есть такая же, но сделанная по технологии «Temporal Tables», а не «Change Tracking»?
(9) Какой у Вас use case ?
Мне кажется, что именно для обмена данными temporal tables … как узнавать что данные по строке изменились ? Запрашивать все строки таблицы на предмет наличия версий в исторической таблице ? Тяжёлый может быть запрос …
Или есть какой-то простой и достаточно лёгкий способ получить именно изменённые на какой-то момент времени строки ?
Приветствую.
1. Не удобно проставлять соответствия между источником и приемником.
2. Нет четкого описания, что делать приперед обновлением конфигурации
3. ОСНОВНОЕ: как настраивать фильтрацию для выгрузкизагрузки.
С уважением.
(11) Огромное спасибо за конструктивную критику!