interbase xe7: Применение change views для синхронизации данных
TRANSCRIPT
Применение Change Views InterBase XE7
для синхронизации данных
Кросс-платформенные инструменты для работы с БД
Андрей СовцовEmbarcadero,Москваemail: [email protected]
Дмитрий КузьменкоEmbarcadero MVP, Генеральный директор iBase.ru, Москваemail: [email protected]
90 из Fortune 100 и 97% изGlobal 2000
Темы1. Отслеживание обновлений данных
2. Общая модель ChangeViews
3. Создание подписок
4. Активация подписок
5. Просмотр обновленных данных
6. Особенности использования
– В SQL
– В драйверах и компонентах
7. Как это устроено
8. Примеры применения
InterBase - Применение
• Длительная история использования – с 1985 годаПервый коммерческий сервер с многоверсионностью
• Базы данных в среднем до 150 гигабайт• база данных может иметь размер до 131 терабайт
• До 500 одновременных пользователей• чаще является лимитом операционной системы
• Бухгалтерия, склад, системы денежных переводов, биллинг, торговля, системы учета …
• Однопользовательские и многопользовательские приложения
Главные достоинства
• Минимум требований к аппаратному обеспечению
• Минимум требований к ОС – десктопная или серверная
• Минимум администрирования– Может работать годами без обслуживания
– Для больших баз с большим количеством пользователей обслуживание требуется для достижения максимальной производительности
• Идентичность БД для разных платформ
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
Отслеживание обновлений данных
• Обычное перечитывание данных• Методы отслеживания изменений:
Сравнение двух результатов выборки Нужно хранить предыдущий результат (ClientDataSet)
Модель с дополнительным столбцом Дополнительный столбец, обновляемый триггером, с
генератором, инкрементируемым при вставке и обновлени Select * where upd_field > x
Репликация триггерами Дополнительные триггеры на все реплицируемые таблицы,
таблица лога
• InterBase XE7 – ChangeViews !
InterBase XE7 ChangeViews
Subscription
EMPLOYEE
SALES
…
Пользователь
Устройство 1
Устройство 2
updateinsertdelete
Создание подписки
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)
• FOR ROW (CHANGE)
– По умолчанию
• CHANGE = INSERT, UPDATE
• Если столбцы явно не указаны, то отслеживаются изменения всех столбцов
Примеры
• 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';
Удаление подписки
• DROP SUBSCRIPTION <subscription_name> [RESTRICT | CASCADE];
• RESTRICT – не удалять, если есть подписчики (по умолчанию)
• CASCADE – удалять все активации подписок
Выдача прав на подписку
• GRANT SUBSCRIBE ON SUBSCRIPTION <subscription_name> TO <user_name>;
• REVOKE SUBSCRIBE ON SUBSCRIPTION <subscription_name> FROM <user_name>;
Активация подписки
• start transaction• select …
– Получаем обычные данные
• set subscription … active• select …
– Получаем изменения, на которые подписались
• set subscription … inactive• select
– Получаем обычные данные
• …• commit – информация о просмотренных изменениях будет
удалена• rollback – просмотренные изменения подписки не удаляются
Активация подписки
• 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 – выключает режим показа изменений
• [AT <destination>]
• Место получения обновлений по подписке
• Изменения накапливаются для конкретного пользователя и места получения изменений по подписке
• start - active – commit, start - active – commit…
Накапливаемые изменения
Особенности
• Уровни изолированности
– 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
• Если в таблице, отслеживаемой по подписке, ничего не изменялось с момента получения последней подписки, товы получите пустой результат операции!
• Select * from employee<no rows>
• При экспериментах помните, что snapshot-транзакция не показывает никаких сторонних изменений.
IBTransaction1.DefaultAction:=TARollback
Подписка не активна – обычные данные
Подписка активна – только измененные данные
Выборка конкретных изменений
• Select …where <FIELD> IS [NOT] {CHANGED | INSERTED | UPDATED | DELETED}
• select * from employee where last_name is updated
• UPDATED – только тот столбец, который был изменен
• INSERTED, DELETED – любой столбец
Inserts
Updates
Deletes
Поддержка ChangeViews в ISQL
• ISQL • SHOW SUBSCRIPTIONS• SHOW SUBSCRIPTION <name>
• SET CHANGES• Включение показа изменений – добавляется
вывод дополнительного столбца <change> для каждого столбца таблицы, где показывается что было сделано со столбцом (same, update, insert, delete)
Новое в InterBase API
• Если изменения были – то при активной подписке вы получите измененные строки. Однако понять, в каких столбцах и что произошло, можно только в компонентах прямого доступа, анализируя XSQLVAR.SQLIND
• SQLIND_INSERT 1• SQLIND_UPDATE 2• SQLIND_DELETE 4• SQLIND_CHANGE 8• SQLIND_CHANGE_VIEW 32
Поддержка в компонентах
• Пока нет– Будет в 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, запись вставлена
• …
Как это устроено• При активных подписках удерживаются версии, которые нужны для показа
изменений
• Commit «сбрасывает» метку последних изменений
• Отключение пользователей или принудительный sweep не убирают отслеживаемые изменения
2 update или delete
• Накопление версий ухудшает производительность
• Насколько давние подписки требуется хранить?– Контроль 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
• Как это применять?
– Получить изменения, сохранить в локальную БД или кэш
– rdb$subscribers.rdb$check_out_timestampдата-время, с которого накоплены изменения для конкретного подписчика
Почитать
• 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/
Проще, быстрее давать
качественный код
Гибкие средства создания и отладки для SQL-профессионалов
Предназначен для
•Разработчиков баз данных
•Бизнес-аналитики/отв.за данные
Преимущества
•Позволяет создавать быстрее качественный SQL для разных платформ СУБД
•Поддержка всех платформ СУБД
• ISQL
•Visual Query Builder – мастер создания SQL
•Средства анализа кода (Code Analyst)
•Отладчик SQL
•Бесшовная интеграция с ведущими коммерческими системами контроля версий
Проблемы разработчиков БД Расширение экосистемы
баз данных Качество кодаЦиклы гибкой (Agile)
разработки
“Я использовал Rapid SQL для решения многих проблем на разных платформах, и он всегда превосходил мои ожидания. …Rapid SQL упрощает процесс написания серверного кода БД, позволяя добиться лучшей производительности БД и с легкостью выпускать высококачественные приложения, работающие с БД.”-Atos Origin, ведущая международная ИТ сервис-компания
Синхронизация схем и данных для разных сред баз данных
Синхронизация
баз данных
Отслеживание
изменений в БД
Пригодность к
аудиту БД и
контролю
соответствия
Быстрое внесение изменений в БД•Создает скрипты изменений для синхронизации выбранных объектов или возврату в последнее состояние •Полные знания по всем платформам СУБД
Обнаружить, отследить, учесть•Сравнивает и синхронизирует данные как в рамках одной, так и в разных БД•Документирует важнейшие настройки БД
Соответствие принятым стандартам•Архивы схем и настроек станут основой для аудита и подтверждения соответствия •Маскирование имперсонифицирует данные
Предназначен для Администраторов БД (DBA), Разработчиков БД
Уменьшение рисков при изменениях
DB Change Manager - данные
Сравнивает или синхронизирует данныетаблиц БД
Сравнивает схемы, обеспечивает сопоставление объектов, маскирование данных
Полезные ссылки• Описание
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
Спасибо за внимание!
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-эксперт
Вопросы?