В последней версии СУБД Interbase XE7 появилась технология ChangeViews, которая резко упрощает и ускоряет синхронизацию изменений в базах данных Interbase. Как с помощью этой технологии упростить и оптимизировать процессы обеспечения целостности и согласованности данных, расскажет эксперт Дмитрий Кузьменко (iBase.ru). На русском языке.
Запись трансляции: http://youtu.be/0PAY8HohwWc
1 of 41
Download to read offline
More Related Content
InterBase XE7: Применение Change Views для синхронизации данных
1. Применение
Change Views InterBase XE7
для синхронизации данных
Кросс-платформенные инструменты для работы с БД
Андрей Совцов
Embarcadero,Москва
email: Andrew.sovtsov@embarcadero.com
Дмитрий Кузьменко
Embarcadero MVP,
Генеральный директор iBase.ru, Москва
email: kdv@ibase.ru
3. Темы
1. Отслеживание обновлений данных
2. Общая модель ChangeViews
3. Создание подписок
4. Активация подписок
5. Просмотр обновленных данных
6. Особенности использования
– В SQL
– В драйверах и компонентах
7. Как это устроено
8. Примеры применения
4. InterBase - Применение
• Длительная история использования – с 1985 года
Первый коммерческий сервер с
многоверсионностью
• Базы данных в среднем до 150 гигабайт
• база данных может иметь размер до 131 терабайт
• До 500 одновременных пользователей
• чаще является лимитом операционной системы
• Бухгалтерия, склад, системы денежных переводов,
биллинг, торговля, системы учета …
• Однопользовательские и многопользовательские
приложения
5. Главные достоинства
• Минимум требований к аппаратному
обеспечению
• Минимум требований к ОС – десктопная или
серверная
• Минимум администрирования
– Может работать годами без обслуживания
– Для больших баз с большим количеством
пользователей обслуживание требуется для
достижения максимальной производительности
• Идентичность БД для разных платформ
6. 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 марта 2015
http://cc.embarcadero.com/item/30155
http://www.youtube.com/watch?v=l5fu2HXERbE
7. Отслеживание обновлений данных
• Обычное перечитывание данных
• Методы отслеживания изменений:
Сравнение двух результатов выборки
Нужно хранить предыдущий результат (ClientDataSet)
Модель с дополнительным столбцом
Дополнительный столбец, обновляемый триггером, с
генератором, инкрементируемым при вставке и обновлени
Select * where upd_field > x
Репликация триггерами
Дополнительные триггеры на все реплицируемые таблицы,
таблица лога
• InterBase XE7 – ChangeViews !
9. Создание подписки
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 on
EMPLOYEE
FOR ROW (INSERT, UPDATE, DELETE)
Работает только в ODS 16 (базах, созданных в InterBase XE7)
10. • FOR ROW (CHANGE)
– По умолчанию
• CHANGE = INSERT, UPDATE
• Если столбцы явно не указаны, то
отслеживаются изменения всех столбцов
11. Примеры
• CREATE SUBSCRIPTION sub_employee_changes
ON EMPLOYEE (EMP_NO, DEPT_NO, SALARY) DESCRIPTION 'Subscribe to
changes in EMPLOYEE table';
• CREATE SUBSCRIPTION sub_customer_deletes
ON CUSTOMER FOR ROW (DELETE)
DESCRIPTION 'Subscribe to deletes in CUSTOMER table';
• CREATE SUBSCRIPTION sub_various_changes
ON 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';
12. Удаление подписки
• DROP SUBSCRIPTION <subscription_name>
[RESTRICT | CASCADE];
• RESTRICT – не удалять, если есть
подписчики (по умолчанию)
• CASCADE – удалять все активации подписок
13. Выдача прав на подписку
• GRANT SUBSCRIBE ON SUBSCRIPTION
<subscription_name> TO <user_name>;
• REVOKE SUBSCRIBE ON SUBSCRIPTION
<subscription_name> FROM <user_name>;
14. Активация подписки
• start transaction
• select …
– Получаем обычные данные
• set subscription … active
• select …
– Получаем изменения, на которые подписались
• set subscription … inactive
• select
– Получаем обычные данные
• …
• commit – информация о просмотренных изменениях будет
удалена
• rollback – просмотренные изменения подписки не удаляются
15. Активация подписки
• 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 – выключает режим показа изменений
16. • [AT <destination>]
• Место получения обновлений по подписке
• Изменения накапливаются для конкретного
пользователя и места получения изменений
по подписке
• start - active – commit, start - active – commit…
Накапливаемые изменения
17. Особенности
• Уровни изолированности
– 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
18. • Если в таблице, отслеживаемой по подписке,
ничего не изменялось с момента получения
последней подписки, то
вы получите пустой результат операции!
• Select * from employee
<no rows>
• При экспериментах помните, что snapshot-
транзакция не показывает никаких сторонних
изменений.
23. Выборка конкретных изменений
• Select …
where <FIELD> IS [NOT] {CHANGED | INSERTED |
UPDATED | DELETED}
• select * from employee where last_name is
updated
• UPDATED – только тот столбец, который был
изменен
• INSERTED, DELETED – любой столбец
28. Поддержка ChangeViews в ISQL
• ISQL
• SHOW SUBSCRIPTIONS
• SHOW SUBSCRIPTION <name>
• SET CHANGES
• Включение показа изменений – добавляется
вывод дополнительного столбца <change> для
каждого столбца таблицы, где показывается
что было сделано со столбцом (same, update,
insert, delete)
30. Новое в InterBase API
• Если изменения были – то при активной подписке
вы получите измененные строки. Однако понять, в
каких столбцах и что произошло, можно только в
компонентах прямого доступа, анализируя
XSQLVAR.SQLIND
• SQLIND_INSERT 1
• SQLIND_UPDATE 2
• SQLIND_DELETE 4
• SQLIND_CHANGE 8
• SQLIND_CHANGE_VIEW 32
31. Поддержка в компонентах
• Пока нет
– Будет в 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, запись вставлена
• …
32. Как это устроено
• При активных подписках удерживаются версии, которые нужны для показа
изменений
• Commit «сбрасывает» метку последних изменений
• Отключение пользователей или принудительный sweep не убирают
отслеживаемые изменения
2 update или delete
33. • Накопление версий ухудшает
производительность
• Насколько давние подписки требуется
хранить?
– Контроль rdb$subscribers.rdb$check_out_timestamp,
«сброс» подписки –
delete from rdb$subscribers
where rdb$subscriber_name = 'SYSDBA' and
rdb$subscription_name = 'EMPS‘
and rdb$destination = 'work3‘
• Накопленные изменения не переживают
backup/restore
34. • Как это применять?
– Получить изменения, сохранить в локальную
БД или кэш
– rdb$subscribers.rdb$check_out_timestamp
дата-время, с которого накоплены изменения
для конкретного подписчика
36. Проще, быстрее давать
качественный код
Гибкие средства создания и отладки для SQL-профессионалов
Предназначен для
•Разработчиков баз данных
•Бизнес-аналитики/отв.за данные
Преимущества
•Позволяет создавать быстрее качественный
SQL для разных платформ СУБД
•Поддержка всех платформ СУБД
•ISQL
•Visual Query Builder – мастер создания SQL
•Средства анализа кода (Code Analyst)
•Отладчик SQL
•Бесшовная интеграция с ведущими
коммерческими системами контроля
версий
Проблемы разработчиков БД
Расширение экосистемы
баз данных Качество кода
Циклы гибкой (Agile)
разработки
“Я использовал Rapid SQL для решения многих проблем на
разных платформах, и он всегда превосходил мои ожидания.
…Rapid SQL упрощает процесс написания серверного кода БД,
позволяя добиться лучшей производительности БД и с
легкостью выпускать высококачественные приложения,
работающие с БД.”
-Atos Origin, ведущая международная ИТ сервис-компания
37. Синхронизация схем и данных для разных сред баз данных
Синхронизация
баз данных
Отслеживание
изменений в БД
Пригодность к
аудиту БД и
контролю
соответствия
Быстрое внесение изменений в БД
•Создает скрипты изменений для
синхронизации выбранных объектов или
возврату в последнее состояние
•Полные знания по всем платформам СУБД
Обнаружить, отследить, учесть
•Сравнивает и синхронизирует данные
как в рамках одной, так и в разных БД
•Документирует важнейшие настройки
БД
Соответствие принятым
стандартам
•Архивы схем и настроек станут основой для
аудита и подтверждения соответствия
•Маскирование имперсонифицирует данные
Предназначен для Администраторов БД (DBA), Разработчиков БД
Уменьшение рисков при изменениях
38. DB Change Manager - данные
Сравнивает или
синхронизирует данные
таблиц БД
Сравнивает схемы, обеспечивает
сопоставление объектов,
маскирование данных
39. Полезные ссылки
• Описание
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: Russia.Info@embarcadero.com
Телефон: +7(495)7084393
В социальных сетях
Facebook: http://on.fb.me/WDUQqY
LinkedIn: http://linkd.in/WDVeWu
Google+: http://bit.ly/WDVViL
40. Спасибо за внимание!
Powering Today’s Applications and Data
Андрей Совцов
Embarcadero
Email: Andrew.Sovtsov@Embarcadero.com
Blog: http://embt.co/ASovtsov
Tel: +7(495)708 4393
Записи вебинаров: http://embt.co/MrAndySova
Блоги Embarcadero
(все языки):
http://community.embarcadero.com/index.php/blogs
+7(495) 953-13-34,
sales@ibase.ru, support@ibase.ru
Кузьменко Дмитрий
iBase.ru
Генеральный директор
IT-эксперт