|
|
|
Взаимодействие баз данных
|
|||
|---|---|---|---|
|
#18+
Просьба поделиться опытом. Задача. Есть две базы данных, структура которых физически различна, но спроектированы они под одну и ту же предметную область. Одна база данных по сути является одним большим хранителем данных, друга использует эти данные, т.е. является потребителем. Каким образом организовать информационное взаимодействие этих двух баз данных. Как правило данные из хранилище поступают в БД-потребителя. Рассматривались следующие варианты: 1) из БД1 все данные выгружались в виде XML по согласованной структуре, в БД2 эти данные загружаются; 2) из БД2 по dblink выполнялись запросы в БД1. Вопрос: 1) есть ли готовые инструменты обмена данными между БД. 2) если нет какой вариант предпочтителен. 3) как ускорить загрузку данных из XML. (в рамках одной транзакции, этот процесс занимает часы, что не приемлемо). Разработчик база данных разные. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 11:52:18 |
|
||
|
Взаимодействие баз данных
|
|||
|---|---|---|---|
|
#18+
big-trot, XML действительно долго. Пользуюсь dblink в хранимых процедурах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 12:43:04 |
|
||
|
Взаимодействие баз данных
|
|||
|---|---|---|---|
|
#18+
big-trot, поинтересуйтесь, как работают системы триггер-репликации. по сравнению с вашим случаем они всего-то отличаются тем, что там таблица назначения (что не существенно, на самом деле в самом решении, но маскирует некоторые допущения, которые потребуются в вашем случае) совпадает с таблицей источника по структуре. т.е. вам нужно обрабатывать 2 случая. 1. передача снепшота, и первичная синхронизация. <тут всё в лоб, часами> 2. передача (и обработка по месту назначения) событий через очередь. <тут экономия на инкрементальности> но раскладывать это не в совпадающую структуру (как при репликации), а в новую. естественно, это выполнимо, если есть хотя бы намек на однозначность отображения структуры А на структуру Б (взаимной, при одностороннем обмене данными, не требуется. При двустороннем обмене данными всё становится много сложнее, как только выясняется, что одно и то же данное надо согласовывать в обе стороны (коллизии мастер-мастер репликации, умноженные на несовпадение структур, т.е. на сопутствующие преобразования А->Б | Б->А)). PS лондайст например использует для передачи данных свой текстовый формат, сильно похожий на hstore. т.ч. рекомендую hstore для п.2. Для п.1. лондайст просто копирует данные командой COPY (простое сравнение строк возможно в силу совпадения структур. в вашем случае наверное можно схоже, но перед COPY на стороне выгрузки(А) провести преобразование к структуре (Б). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 13:03:02 |
|
||
|
Взаимодействие баз данных
|
|||
|---|---|---|---|
|
#18+
big-trot, www.postgresql.org/docs/9.3/static/postgres-fdw.html так ещё можно, внешние таблицы будут выглядеть как локальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 16:00:41 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=133&tid=1998874]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 414ms |

| 0 / 0 |
