interbase xe7: Применение change views для синхронизации данных

41
Применение Change Views InterBase XE7 для синхронизации данных Кросс-платформенные инструменты для работы с БД Андрей Совцов Embarcadero,Москва email: [email protected] Дмитрий Кузьменко Embarcadero MVP, Генеральный директор iBase.ru, Москва email: [email protected]

Upload: andrew-sovtsov

Post on 20-Jul-2015

183 views

Category:

Software


6 download

TRANSCRIPT

Page 1: InterBase XE7: Применение Change Views для синхронизации данных

Применение Change Views InterBase XE7

для синхронизации данных

Кросс-платформенные инструменты для работы с БД

Андрей СовцовEmbarcadero,Москваemail: [email protected]

Дмитрий КузьменкоEmbarcadero MVP, Генеральный директор iBase.ru, Москваemail: [email protected]

Page 2: InterBase XE7: Применение Change Views для синхронизации данных

90 из Fortune 100 и 97% изGlobal 2000

Page 3: InterBase XE7: Применение Change Views для синхронизации данных

Темы1. Отслеживание обновлений данных

2. Общая модель ChangeViews

3. Создание подписок

4. Активация подписок

5. Просмотр обновленных данных

6. Особенности использования

– В SQL

– В драйверах и компонентах

7. Как это устроено

8. Примеры применения

Page 4: InterBase XE7: Применение Change Views для синхронизации данных

InterBase - Применение

• Длительная история использования – с 1985 годаПервый коммерческий сервер с многоверсионностью

• Базы данных в среднем до 150 гигабайт• база данных может иметь размер до 131 терабайт

• До 500 одновременных пользователей• чаще является лимитом операционной системы

• Бухгалтерия, склад, системы денежных переводов, биллинг, торговля, системы учета …

• Однопользовательские и многопользовательские приложения

Page 5: InterBase XE7: Применение Change Views для синхронизации данных

Главные достоинства

• Минимум требований к аппаратному обеспечению

• Минимум требований к ОС – десктопная или серверная

• Минимум администрирования– Может работать годами без обслуживания

– Для больших баз с большим количеством пользователей обслуживание требуется для достижения максимальной производительности

• Идентичность БД для разных платформ

Page 6: InterBase XE7: Применение Change Views для синхронизации данных

InterBase XE7 - платформы

• 64-bit– Windows 7, 8, Server 2008, 2012

– Linux RHEL 6, 7 SuSE 11.3, Ubuntu 14

• 32-bit– Windows 7, 8, Server 2008, 2012

– Linux RHEL 6, SuSE 11.3, Ubuntu 14

• OS X, Android, iOS– InterBase XE3

– InterBase XE7 – Update 1, выпущен 6 марта 2015http://cc.embarcadero.com/item/30155http://www.youtube.com/watch?v=l5fu2HXERbE

Page 7: InterBase XE7: Применение Change Views для синхронизации данных

Отслеживание обновлений данных

• Обычное перечитывание данных• Методы отслеживания изменений:

Сравнение двух результатов выборки Нужно хранить предыдущий результат (ClientDataSet)

Модель с дополнительным столбцом Дополнительный столбец, обновляемый триггером, с

генератором, инкрементируемым при вставке и обновлени Select * where upd_field > x

Репликация триггерами Дополнительные триггеры на все реплицируемые таблицы,

таблица лога

• InterBase XE7 – ChangeViews !

Page 8: InterBase XE7: Применение Change Views для синхронизации данных

InterBase XE7 ChangeViews

Subscription

EMPLOYEE

SALES

Пользователь

Устройство 1

Устройство 2

updateinsertdelete

Page 9: InterBase XE7: Применение Change Views для синхронизации данных

Создание подписки

CREATE SUBSCRIPTION <subscription_name> ON

<table_name>[(column_name_comma_list)][FOR ROW (CHANGE | {INSERT, UPDATE, DELETE})]

[, <table_name>[(column_name_comma_list)][FOR ROW (CHANGE | {INSERT, UPDATE, DELETE})] ...]

[DESCRIPTION user-description]

create subscripion EMPS onEMPLOYEEFOR ROW (INSERT, UPDATE, DELETE)

Работает только в ODS 16 (базах, созданных в InterBase XE7)

Page 10: InterBase XE7: Применение Change Views для синхронизации данных

• FOR ROW (CHANGE)

– По умолчанию

• CHANGE = INSERT, UPDATE

• Если столбцы явно не указаны, то отслеживаются изменения всех столбцов

Page 11: InterBase XE7: Применение Change Views для синхронизации данных

Примеры

• CREATE SUBSCRIPTION sub_employee_changesON EMPLOYEE (EMP_NO, DEPT_NO, SALARY) DESCRIPTION 'Subscribe to changes in EMPLOYEE table';

• CREATE SUBSCRIPTION sub_customer_deletesON CUSTOMER FOR ROW (DELETE) DESCRIPTION 'Subscribe to deletes in CUSTOMER table';

• CREATE SUBSCRIPTION sub_various_changesON EMPLOYEE FOR ROW (INSERT, UPDATE, DELETE), CUSTOMER FOR ROW (INSERT, UPDATE, DELETE), SALES FOR ROW (UPDATE), DEPARTMENT (LOCATION) FOR ROW (UPDATE) DESCRIPTION 'Subscribe to various changes on multiple tables';

Page 12: InterBase XE7: Применение Change Views для синхронизации данных

Удаление подписки

• DROP SUBSCRIPTION <subscription_name> [RESTRICT | CASCADE];

• RESTRICT – не удалять, если есть подписчики (по умолчанию)

• CASCADE – удалять все активации подписок

Page 13: InterBase XE7: Применение Change Views для синхронизации данных

Выдача прав на подписку

• GRANT SUBSCRIBE ON SUBSCRIPTION <subscription_name> TO <user_name>;

• REVOKE SUBSCRIBE ON SUBSCRIPTION <subscription_name> FROM <user_name>;

Page 14: InterBase XE7: Применение Change Views для синхронизации данных

Активация подписки

• start transaction• select …

– Получаем обычные данные

• set subscription … active• select …

– Получаем изменения, на которые подписались

• set subscription … inactive• select

– Получаем обычные данные

• …• commit – информация о просмотренных изменениях будет

удалена• rollback – просмотренные изменения подписки не удаляются

Page 15: InterBase XE7: Применение Change Views для синхронизации данных

Активация подписки

• SET SUBSCRIPTION [<subscription_name> [, <subscription_name> ...]] [AT <destination>] {ACTIVE | INACTIVE};

• SET SUBSCRIPTION sub_employee_changes, sub_customer_deletes AT ‘smartphone_123‘ ACTIVE;

• ACTIVE – создает «подписчика» в rdb$subscriptions, если его нет, и включает режим показа изменений

• INACTIVE – выключает режим показа изменений

Page 16: InterBase XE7: Применение Change Views для синхронизации данных

• [AT <destination>]

• Место получения обновлений по подписке

• Изменения накапливаются для конкретного пользователя и места получения изменений по подписке

• start - active – commit, start - active – commit…

Накапливаемые изменения

Page 17: InterBase XE7: Применение Change Views для синхронизации данных

Особенности

• Уровни изолированности

– Read Committed

– Snapshot (Repeatable Read)

• Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.Read committed transaction cannot retrieve from a change view.

– Подписка работает только в транзакции SNAPSHOT

Page 18: InterBase XE7: Применение Change Views для синхронизации данных

• Если в таблице, отслеживаемой по подписке, ничего не изменялось с момента получения последней подписки, товы получите пустой результат операции!

• Select * from employee<no rows>

• При экспериментах помните, что snapshot-транзакция не показывает никаких сторонних изменений.

Page 19: InterBase XE7: Применение Change Views для синхронизации данных

IBTransaction1.DefaultAction:=TARollback

Page 20: InterBase XE7: Применение Change Views для синхронизации данных
Page 21: InterBase XE7: Применение Change Views для синхронизации данных

Подписка не активна – обычные данные

Page 22: InterBase XE7: Применение Change Views для синхронизации данных

Подписка активна – только измененные данные

Page 23: InterBase XE7: Применение Change Views для синхронизации данных

Выборка конкретных изменений

• Select …where <FIELD> IS [NOT] {CHANGED | INSERTED | UPDATED | DELETED}

• select * from employee where last_name is updated

• UPDATED – только тот столбец, который был изменен

• INSERTED, DELETED – любой столбец

Page 24: InterBase XE7: Применение Change Views для синхронизации данных
Page 25: InterBase XE7: Применение Change Views для синхронизации данных

Inserts

Page 26: InterBase XE7: Применение Change Views для синхронизации данных

Updates

Page 27: InterBase XE7: Применение Change Views для синхронизации данных

Deletes

Page 28: InterBase XE7: Применение Change Views для синхронизации данных

Поддержка ChangeViews в ISQL

• ISQL • SHOW SUBSCRIPTIONS• SHOW SUBSCRIPTION <name>

• SET CHANGES• Включение показа изменений – добавляется

вывод дополнительного столбца <change> для каждого столбца таблицы, где показывается что было сделано со столбцом (same, update, insert, delete)

Page 29: InterBase XE7: Применение Change Views для синхронизации данных
Page 30: InterBase XE7: Применение Change Views для синхронизации данных

Новое в InterBase API

• Если изменения были – то при активной подписке вы получите измененные строки. Однако понять, в каких столбцах и что произошло, можно только в компонентах прямого доступа, анализируя XSQLVAR.SQLIND

• SQLIND_INSERT 1• SQLIND_UPDATE 2• SQLIND_DELETE 4• SQLIND_CHANGE 8• SQLIND_CHANGE_VIEW 32

Page 31: InterBase XE7: Применение Change Views для синхронизации данных

Поддержка в компонентах

• Пока нет– Будет в FireDAC Delphi XE8

• Для определения изменений столбца нужен доступ к XSQLVAR.sqlind– sqlind содержит битовые флаги признаков изменений (см. ibase.h)– Это значит, что обработка возможна только в компонентах прямого

доступа – IBX, FireDAC, …

• IBX - TIBSQL.Current.Vars[i].SqlVar.sqlind^;• SQIIND and SQLIND_CHANGE_VIEW

– Это результат выдачи change_view

• SQLIND and (SQLIND_CHANGE_VIEW or SQLIND_INSERT)– Это результат выдачи change_view, запись вставлена

• …

Page 32: InterBase XE7: Применение Change Views для синхронизации данных

Как это устроено• При активных подписках удерживаются версии, которые нужны для показа

изменений

• Commit «сбрасывает» метку последних изменений

• Отключение пользователей или принудительный sweep не убирают отслеживаемые изменения

2 update или delete

Page 33: InterBase XE7: Применение Change Views для синхронизации данных

• Накопление версий ухудшает производительность

• Насколько давние подписки требуется хранить?– Контроль rdb$subscribers.rdb$check_out_timestamp,

«сброс» подписки –delete from rdb$subscriberswhere rdb$subscriber_name = 'SYSDBA' and rdb$subscription_name = 'EMPS‘and rdb$destination = 'work3‘

• Накопленные изменения не переживают backup/restore

Page 34: InterBase XE7: Применение Change Views для синхронизации данных

• Как это применять?

– Получить изменения, сохранить в локальную БД или кэш

– rdb$subscribers.rdb$check_out_timestampдата-время, с которого накоплены изменения для конкретного подписчика

Page 35: InterBase XE7: Применение Change Views для синхронизации данных

Почитать

• docwiki.embarcadero.com/InterBase/XE7/en/What's_New_in_InterBase_XE7#Change_Views_Feature

• delphiaball.co.uk/2015/02/06/interbase-change-views-part-1/

• delphiaball.co.uk/2015/02/06/interbase-change-views-part-2-creating-change-view/

• delphiaball.co.uk/2015/02/07/using-interbase-change-views/

• delphiaball.co.uk/2015/03/06/interbase-change-views-example-demo-skill-sprint/

• delphiaball.co.uk/2015/03/11/interbase-xe7-update-1-released/

Page 36: InterBase XE7: Применение Change Views для синхронизации данных

Проще, быстрее давать

качественный код

Гибкие средства создания и отладки для SQL-профессионалов

Предназначен для

•Разработчиков баз данных

•Бизнес-аналитики/отв.за данные

Преимущества

•Позволяет создавать быстрее качественный SQL для разных платформ СУБД

•Поддержка всех платформ СУБД

• ISQL

•Visual Query Builder – мастер создания SQL

•Средства анализа кода (Code Analyst)

•Отладчик SQL

•Бесшовная интеграция с ведущими коммерческими системами контроля версий

Проблемы разработчиков БД Расширение экосистемы

баз данных Качество кодаЦиклы гибкой (Agile)

разработки

“Я использовал Rapid SQL для решения многих проблем на разных платформах, и он всегда превосходил мои ожидания. …Rapid SQL упрощает процесс написания серверного кода БД, позволяя добиться лучшей производительности БД и с легкостью выпускать высококачественные приложения, работающие с БД.”-Atos Origin, ведущая международная ИТ сервис-компания

Page 37: InterBase XE7: Применение Change Views для синхронизации данных

Синхронизация схем и данных для разных сред баз данных

Синхронизация

баз данных

Отслеживание

изменений в БД

Пригодность к

аудиту БД и

контролю

соответствия

Быстрое внесение изменений в БД•Создает скрипты изменений для синхронизации выбранных объектов или возврату в последнее состояние •Полные знания по всем платформам СУБД

Обнаружить, отследить, учесть•Сравнивает и синхронизирует данные как в рамках одной, так и в разных БД•Документирует важнейшие настройки БД

Соответствие принятым стандартам•Архивы схем и настроек станут основой для аудита и подтверждения соответствия •Маскирование имперсонифицирует данные

Предназначен для Администраторов БД (DBA), Разработчиков БД

Уменьшение рисков при изменениях

Page 38: InterBase XE7: Применение Change Views для синхронизации данных

DB Change Manager - данные

Сравнивает или синхронизирует данныетаблиц БД

Сравнивает схемы, обеспечивает сопоставление объектов, маскирование данных

Page 39: InterBase XE7: Применение Change Views для синхронизации данных

Полезные ссылки• Описание

docwiki.embarcadero.com/InterBase/XE7/en/

What's_New_in_InterBase_XE7#Change_Views_Feature

• Interbase на сайте Embarcadero

http://www.embarcadero.com/ru/products/interbase

• InterBase Database: InterBase Labs и Tutorials

http://www.embarcadero.com/ru/products/interbase-labs

• Примеры использования

Newmont Mining, Protective Life, Catalina Marketing, Entrust, Microsoft:

http://www.embarcadero.com/our-customers/case-studies

• Поддержка

http://www.embarcadero.com/support

• Представительство

mailto: [email protected]

Телефон: +7(495)7084393

В социальных сетяхFacebook: http://on.fb.me/WDUQqYLinkedIn: http://linkd.in/WDVeWuGoogle+: http://bit.ly/WDVViL

Page 40: InterBase XE7: Применение Change Views для синхронизации данных

Спасибо за внимание!

Powering Today’s Applications and Data

Андрей СовцовEmbarcadero

Email: [email protected]

Blog: http://embt.co/ASovtsovTel: +7(495)708 4393

Записи вебинаров: http://embt.co/MrAndySova

Блоги Embarcadero (все языки):

http://community.embarcadero.com/index.php/blogs

+7(495) 953-13-34, [email protected], [email protected]

Кузьменко ДмитрийiBase.ru

Генеральный директор IT-эксперт

Page 41: InterBase XE7: Применение Change Views для синхронизации данных

Вопросы?