Какие методы синхронизации 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 туннели гоняйте синхронизацию.
Когда уже есть приложение, которое работает с конкретной базой, достаточно странно предлагать заменить базу. Если бы автор имел возможность вкладывать время и усилия в разработку, он бы и сам разработал новое приложение, удовлетворяющее его потребностям.
shurshur, Зачем тыкать копьём в дохлого мамонта? Никто не говорит переписывать всё приложение, лишь работу с базой. Кто, что и на чём писал - автор не удосужился нас посветить, соответственно предположить что там 3 строки кода для вставки в базу равносильно предположению о монолите из говна и палок 30-ти летней давности.
historydev, если бы автор мог поменять базу, он бы поменял её на MS SQL Server с поддержкой CDC, которого ему и не хватает в SQL Express, что легко понять из его вопроса.
shurshur, Мочь и хотеть разные вещи. Если уже понадобилась человеческая репликация, почему не провести миграцию? На тот-же вами предложенный MS SQL Server.
Гуглинг репликации для express дал ответы за 2006 год, до ответа смотрел.
- И если эта проблема до сих пор не решилась в этом инструменте, маловероятно найти что-то кроме костылей, например тот что вы предложили.
shurshur, Весьма логично провести миграцию на современную бд (postgres), это ничем не отличается от "поставить другую базу".
- Трудозатрат не так уж и много, при условии что реализация ограничивается стандартным sql.
остался всего один разраб, который по уши занят поддержкой
на старом .net примерно 15 лет назад
- Но есть нюансы, которые выяснились лишь после ответа, ведь давать полную информацию не модно.
historydev, во первых приложение написано на очень старом .net framework 3.5 примерно в 2007 году, который давно не поддерживается нормально... во вторых, так легко на postgresql не поменяешь, там могут быть свои особенности.
Кстати, есть и вполне современные версии SQL Express - почему это она не современная.