|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
Отслеживание изменений в таблице БД29.05.2017, 11:00. Показов 4595. Ответов 11
Метки нет (Все метки)
Добрый день!
MS Sql Server 2012. Есть две БД расположенные на одном сервере. В БД №1 данные храняться в ненормализованом виде, в одной плоской таблице. БД №2 по данным представляет собой ту же БД №1, но в нормализованном виде. Сейчас БД №2 синхронизируется с БД №1 посредством триггера на плоской таблице в БД №1. Вопрос следующий: Какая есть альтернатива триггеру с учетом того, что задержка в создании записей в БД №1 и №2 должна быть минимальной?
0
|
|
| 29.05.2017, 11:00 | |
|
Ответы с готовыми решениями:
11
Отслеживание изменений в таблице Отслеживание изменений
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||
| 29.05.2017, 12:09 | ||
|
Чтобы минимизировать время вставки в БД1, придется пожертвовать оным в БД2. Для начала попытайтесь оптимизировать сам триггер. Если результат не удовлетворит, определяйтесь до какой степени можно жертвовать БД2. От этого будет зависеть какие альтернативные варианты можно применить.
1
|
||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 29.05.2017, 12:54 [ТС] | |
|
Производительность триггера устраивает
.Я хотел бы от него отказаться, потому что даже при использовании try catch и именованных транзакций, возможны исключения ведущие к откату неявной транзакции на вставку в триггере. Данные в БД №2 я могу восполнить при их потере, а вот Данные в БД №1 не востановимы.
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||
| 29.05.2017, 14:29 | ||
![]() Настройте для таблицы в БД1 Common Data Capture - асинхронный механизм отслеживания изменений. Все что наотслеживалось, опять же асинхронно, переносить в БД2.
1
|
||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
||
| 29.05.2017, 15:35 [ТС] | ||
а я и не спрашивал. Я спрашивал про альтернативу.Про Common Data Capture сейчас погуглю, спасибо! Добавлено через 22 минуты Я понял о чем речь. Рассматривал уже вместе с Change Tracking. Не совсем понимаю как мне это поможет? Если я все правильно понял, то в таком случае мне надо писать windows service, который будет следить за служебной таблицей с логом и в случае обнаржуения новых записей переносить их в БД №2. Я могу это сделать, но не знаю как такой сервис грамотно написать: - какую технологию доступа к данным использовать? - с какой периодичностью нужно организовывать проверку к таблице? - возмжно обращение к логу это почти как обращение к исходной таблице (по времени) и тогда Common Data Capture в моем случае бесполезно. Я чего-то не понимаю?
0
|
||
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|||
| 29.05.2017, 15:57 | |||
|
0
|
|||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|||
| 29.05.2017, 16:28 [ТС] | |||
|
Добавлено через 12 минут Я сильно не копал (Basic Task и Task) но планировщик вроде как минимум 30 с.
0
|
|||
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
|||
| 29.05.2017, 17:01 | |||
Сообщение было отмечено _katon_ как решение
РешениеЕсть, как мне думается, наилучший вариант при ваших условиях - Service Broker. Триггер на таблице в БД1 просто отправляет сообщения в очередь. В сообщении либо значения ключей, либо, если нужно полностью развязаться с основной таблицей или обработчик сообщений будет в БД2, полный набор вставляемых данных. Соответственно, обработчик сообщений (процедура активации) парсит сообщения и заносит данные в БД2. Итого имеем ряд важных преимуществ: - очередь может быть настроена на одновременную работу нескольких обработчиков одновременно; - если очередь находится в БД2, то БД2 может быть совершенно прозрачно перенесена на другой сервер.
1
|
|||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 30.05.2017, 09:27 [ТС] | |
|
Ознакомился немного с технологией (чтобы представлячть сферу решаемых задач). Видимо это действительно то, что мне надо. Пойду "курить" это все обстоятельно. Отпишусь что получилось в итоге
. invm, спасибо!
0
|
|
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 01.06.2017, 15:28 [ТС] | |
|
Первый взгляд оказался обсалютно верным.
Оказалось SB не так популярен как хотелось бы. Поэтому, раскопать статейку с популярным изложением практического применения не так уж и просто (как оказалось). Разбирался с помощью вот этого материальчика: https://blogs.msdn.microsoft.c... 08/15/183/. По идее можно еще разобраться с помощью msdn (там есть учебник), но меня он как-то когнитивно угнетает. Когда вернулся на форум и перечитал рекомендации, то понял, что нафейли: настроил SB на БД источнике, что заставит меня писать лишний код если нужно будет, либо переносить базу, либо разворачивать ее тестовый вариант. Скорее всего буду перенастраивать! Ну и дополнительно возник вопрос. Как лучше отправлять сообщение с триггера? Если очередь в БД источнике то все понятно. Но если очередь в БД2? Мне на ум приходит только вызов хранимой процедуры из БД2 в триггере БД1. Это вообще как, нормальное решение или так себе?
0
|
|
|
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
|
||
| 01.06.2017, 16:12 | ||
![]() У вас, в любом случае, в БД-отправителе должен быть сервис-инициатор. Иначе вы диалог не откроете. Если владеете английским, есть неплохая книга - http://www.apress.com/us/book/9781590599990 Думаю, вам не составит труда найти откуда скачать.
1
|
||
|
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
|
|
| 01.06.2017, 16:43 [ТС] | |
|
В моем примере сервисы на одной БД
. И я как-то не задумывался о варианте когда сервис инициатор на одной БД, а получатель на другой. Подозреваю, что сервисы при создании надо немножко по другому конфигурировать. Есть на эту тему хорошие статьи или все таки лучше найти книгу?Добавлено через 7 минут Посмотрев синтаксис BEGIN DIALOG CONVERSATION я разобрался в чем дело. Спасибо, invm.
0
|
|
| 01.06.2017, 16:43 | |
|
Помогаю со студенческими работами здесь
12
отслеживание изменений Отслеживание изменений отслеживание изменений Отслеживание изменений Отслеживание изменений в БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|