|
|
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
Впервые столкнулся с задачей. Нужен авторитетный совет, вручную делать логирование изменений, или воспользоваться CDC или CT. Склоняюсь к ручному. Подробности: Магазины Код: sql 1. 2. 3. 4. 5. 6. 7. Товары в розничном магазине Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Допуски и наценки товаров на магазинах Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Нужно логировать изменения атрибутов таблиц Item (строк > 210к)и ShopItem ( > 210к * кол-во магазинов(Shop) ). Каждый день в таблицах Item и ShopItem примерно по 1.5к изменений в каждой. Задача состоит в том, чтобы высылать в магазины из головного офиса не всю таблицу, а только изменения за день. Прочитал про CT и CDC по диагонале на хабре и линки с них. В Change Tracking не хранится время изменения. И значение измененных атрибутов, только версии изменений, операции и первичные ключи. В Change Data Capture, как я понял, если меняется значение одного атрибута в строке, то логируется все атрибуты. А в оригинальной таблице Item их много(=21). Ручное решение: Таблица, логирующая изменения Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. pkValue имеет тип xml ибо первичный ключ может быть составным. Я специально вначале привёл в пример 2 таблицы, где у таблицы Item первичный ключ по полю Id, а ShopItem по ShopId и ItemId, т.е. значения будут примерно следующие: Для Item: <Id>1</Id>, <Id>2</Id>, <Id>999</Id> Для ShopItem: <ShopId>1</ShopId><ItemId>2</ItemId>, <ShopId>1</ShopId><ItemId>999</ItemId> Если что: я помню, что sys.column_id уникален только для одного sys.object_id. Но у меня в таблице есть object_id первичного ключа таблицы, по нему можно найти object_id таблицы, которой принадлежит колонка Собственно хотел бы знать мнение гуру. Больше читать, про CT, CDC или ручное решение приемлемо? Если RTFM, то что именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 15:36 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
mDanilov, Поправка: 1) Описка: таблицу sysColumn_log правильнее назвать ObjectChanging_log чтобы никто не запутался 2) Не пояснил: pkId - это object_id первичного ключа из sys.object. По нему уже понятно по какой таблице идет логирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 15:43 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
Я бы не делал одну таблицу для логгирования: 1. Неудобно ни писать ни читать. 2. Для логгирования 1 записи таблицы с многими полями нужно создавать много записей в лог. Ваши аппетиты на логгирование непременно вырастут. И этой таблицы все равно не хватит. Делайте отдельные лог-таблицы подобной оригиналу структуры. Можно вообще объединить ф-цию хранения инфы и логирования просто добавив дату в осн. таблицу. :) Зачитывать оттуда ф-цией, кот. достанет нужное значение на нужную дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 15:58 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
mDanilovКаждый день в таблицах Item и ShopItem примерно по 1.5к изменений в каждой. Задача состоит в том, чтобы высылать в магазины из головного офиса не всю таблицу, а только изменения за день.вам нужна вся история изменений за день или только самое последнее изменение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2017, 22:06 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
Дедушка, Последнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2017, 09:10 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
mDanilov, LSV правильно сказал, что в перспективе аппетиты логирования вырастут, и изменения из других таблиц тоже придётся логировать. Именно поэтому я и стараюсь хранить логи в одной таблице, чтобы новые не создавать. Максимум - новые процедуры и триггеры Основной то вопрос у меня все-таки такой: Я правильно понял, что для моей задачи CT и CDC не подходит? И надо вручную делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2017, 09:16 |
|
||
|
Отслеживание изменений. Вручную или (Change Data Capture или Change Tracking)?
|
|||
|---|---|---|---|
|
#18+
mDanilovДедушка, Последнее для твоей задачи хватит простого поля "last_update_datetime" в каждой таблице обновляемого триггером. И раз в сутки пересылаешь то, что изменилось за день. (Тебе же не нужна вся история изменений) Всё, профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 17:20 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39469157&tid=1540159]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 470ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...