Какие методы синхронизации SQL Express и MSSQL Server порекомендуете?
Есть множество торговых точек, в которых работает приложение с SQL Express. Нужно синхронизировать их в режимe реального времени, ну или хотя бы с лагом 1 день, с Microsoft SQL Server в облаке. CDC (change data capture) у SQL Express отсутствует, чем его можно заменить - с минимумом требуемого пространства на диске. Shadow Tables - не подходят именно из-за этого.
У точек нет выделенного IP, они сидят под NAT, следовательно не доступны для подключения извне - только push method - от точек к облаку.
Вадим, можно делать бэкапы баз, сливать их в одно место и там уже собирать в одну базу изменения.
Если разработчики приложения доступны или если есть хоть какие-то навыки программирования - дорабоать приложение, чтобы оно само делало инкрементальные обновления по запросу (хотя бы по принципу updated_at>время_предыдущей_дельты) или добавить самому на триггерах выявление изменяющихся полей. В общем, варианты есть.
Вадим, например, добавить поле updated_at в нужные таблицы. При выполнении insert/update выставлять триггером текущее время. Я MS SQL не знаю, но триггеры там стопудово должны быть (погуглил - реально есть).
Каждый "бэкап" у нас есть "время прошлого бэкапа" и можно сделать select .. where updated_at>="время прошлого бэкапа". Получится, что мы заберём из базы только изменившиеся строчки.
Если приложению будет мешать лишнее поле в базе (что на самом деле признак кривизны рук разработчика - ненормально использовать SELECT * в коде), то можно вместо этого класть id записи и время в отдельную таблицу. Ещё могут быть сложности, если приложение удаляет строки - их тоже надо учитывать.
Кстати прям сейчас гугл спросил "mssql получить время изменения строки" и там ИИ прям примеры триггеров предлагает.
В результате можно написать скрипт или небольшое приложение, которое на точке может снять из базы только затронутые данные. Возможно, они сами по себе будут небольшими. Или же их можно не хранить, а заливать в онлайне - берём из базы набор данных, отправляем на сервер. Например, в виде csv-файлов по 10 тыс. строк.
Получив только изменившиеся данные, их нужно будет скриптом/приложением влить в основную базу. В принципе, если хорошо сделать, можно довести это до автоматизма либо поручив запускать в какой-нить момент, например, учёта... Но да, придётся что-то попрогать, поотлаживать...
Я так понимаю, речь видимо идёт про учёт товаров в торговых точках, чтобы иметь всю актуальную информацию по товарам, запасам, продажам итд.
Вообще, я бы ещё попробовал поискать, может есть готовые инструменты такого рода для "псевдорепликации" данных?
shurshur, приложеньку писали на старом .net примерно 15 лет назад и остался всего один разраб, который по уши занят поддержкой. Да, нужно иметь общую аналитику по всей сети.
Кстати, когда ищешь надо искать именно SQL Express - у него намного меньше возможностей, чем у полного MsSQL
Таки поставьте SQL стандарт в точках. А к тому времени как MS начнет (если) продавать свои продукты, вы уже приложение смените.
Насчет статических адресов, я так понимаю вы упомянули в связи с тем что инициировать синхронизацию данных со стороны MS SQL std вы не можете. Так поднимите VPN до головы и через VPN туннели гоняйте синхронизацию.