|
|
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
Добрый день! Допустим, есть головная контора и филиалы. Везде стоят базы одинаковой структуры, ссылочная целостность базируется на PRIMARY KEYS по полям SERIAL. Как в головной организации создать объединённую базу по всем филиалам? У кого есть опыт? Пока думаю перейти на использование SEQUENCE, но много кусков INSERT (0,...) придётся переписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2005, 12:49 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk Допустим, есть головная контора и филиалы. Везде стоят базы одинаковой структуры, ссылочная целостность базируется на PRIMARY KEYS по полям SERIAL. Как в головной организации создать объединённую базу по всем филиалам? У кого есть опыт? Смотря что потом с этой объединенной информацией делать... Если каналы связи хорошие, то для выполнения консолидированных отчетов можно использовать распределенные запросы. Если хочется (или нужно) иметь всю информацию (копию) в одном месте , то встанет вопрос ее актуальности - тогда можно использовать однонаправленную репликацию нужных таблиц. Можно собрать физически все БД в одном месте (на одном сервере), но так и не объединять в одну БД, просто каждая БД будет иметь свое название и тогда даже структуру таблиц менять не надо. Если же нужно слить всю информацию в одну центральную БД, то без тщательного перепроектирования не обойтись. Есть еще вопросы общих справочников (можно ли их корректировать на местах или только в центре), целостности и актуальности информации, уникальных идентификаторов по всей системе, привязки к филиалам и мн.др. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2005, 18:44 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
авторЕсли каналы связи хорошие, то для выполнения консолидированных отчетов можно использовать распределенные запросы. Это как? Как это должно обрабатываться на клиенте? Допустим, хотим получить список договоров по всем филиалам? Динамически строить SELECT ... UNION SELECT по 10-20 серверам? Боюсь, даже теоретически время отклика будет зашкаливать за рамки комфортной работы. авторЕсли хочется (или нужно) иметь всю информацию (копию) в одном месте , то встанет вопрос ее актуальности - тогда можно использовать однонаправленную репликацию нужных таблиц. Можно собрать физически все БД в одном месте (на одном сервере), но так и не объединять в одну БД, просто каждая БД будет иметь свое название и тогда даже структуру таблиц менять не надо. Филиальские базы нужны для построения консолидированной отчётности раз в месяц, ну и для получения прочей информации. Таким образом, on-line доступа к филиалам нам не требуется. В крайнем случае - ежедневные ночные выгрузки. Можно вопрос: какие версии Informix нужны для репликации - 1 Ent+ n ODS или (n+1) Ent? Необъединённые базы на одном сервере - большая проблема для клиента БД. авторЕсли же нужно слить всю информацию в одну центральную БД, то без тщательного перепроектирования не обойтись. Есть еще вопросы общих справочников (можно ли их корректировать на местах или только в центре), целостности и актуальности информации, уникальных идентификаторов по всей системе, привязки к филиалам и мн.др. Проблема справочников решается организационно - редактирование части таблиц на филиалах будет запрещено. Если окажется, что филиалам нужно будет редактировать справочники (только добавлять записи), переведём справочники на Sequence с minvalue. Случай UPDATE для записей из центральной базы не рассматриваем, IMHO, это допускать нельзя. А вот про перепроектирование базы не расскажите? Именно этот вопрос интересует больше всего. Какие цели надо поставить при этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 10:44 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
Да, кстати. А почему Informix так долго не внедрял механизм Sequence? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 10:45 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenkДа, кстати. А почему Informix так долго не внедрял механизм Sequence? А зачем оно? А самому слабо одну табличку создать и одну процедуру написать (автономных транзакций конечно нет, но и это не проблема)? hint: serial можно начать с любого числа, т.е. теже диапазоны. hint2: для того чтобы перейти на SEQUENCE не надо переписывать много кусков INSERT (0,...), надо добавить триггер на insert и там 0 подменять на значение из SEQUENCE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 11:32 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
авторА зачем оно? А самому слабо одну табличку создать и одну процедуру написать (автономных транзакций конечно нет, но и это не проблема)? hint: serial можно начать с любого числа, т.е. теже диапазоны. hint2: для того чтобы перейти на SEQUENCE не надо переписывать много кусков INSERT (0,...), надо добавить триггер на insert и там 0 подменять на значение из SEQUENCE. 1. Думаю, что механизм SEQUENCE надёжнее и быстрее. IMHO 2. Serial я не могу обойти при вставке. 3. Да, наверное можно сделать и так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 11:46 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk 1. Думаю, что механизм SEQUENCE надёжнее и быстрее. IMHO чем что? чем сериал? - сомневаюсь zenk 2. Serial я не могу обойти при вставке. брр. Не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:17 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
1. Нет, чем informix.sequence_factory и процедуры get_from_seq_factory() 2. Insert into tbl_main (id, name) VALUES (12345, 'бла-бла-бла') или Insert into tbl_main (id, name) SELECT id, name FROM tbl_filal, если id - serial. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:29 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk 2. Insert into tbl_main (id, name) VALUES (12345, 'бла-бла-бла') или Insert into tbl_main (id, name) SELECT id, name FROM tbl_filal, если id - serial. <сарказм on> че правда что-ли? А мужики-то не знают. Остается вопрос как dbimport заливает. <сарказм off> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:35 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk авторЕсли каналы связи хорошие, то для выполнения консолидированных отчетов можно использовать распределенные запросы. Это как? Как это должно обрабатываться на клиенте? Допустим, хотим получить список договоров по всем филиалам? Динамически строить SELECT ... UNION SELECT по 10-20 серверам? Боюсь, даже теоретически время отклика будет зашкаливать за рамки комфортной работы. 1. Повторюсь - "Если каналы связи хорошие" 2. "для выполнения консолидированных отчетов" - т.е. это не оперативная "комфортная" работа, а аналитика или отчетность , а время реакции для этих запросов играет значительно меньшую роль, главное актуальность и полнота. 3. + Не надо заморачиваться с репликами и копированием баз 4. + Полная "свобода на местах" в части ведения справочников и остального :) 5. Если это раз в месяц, то выполняясь по ночам, время выполнения запросов вообще мало значимо. zenk авторЕсли хочется (или нужно) иметь всю информацию (копию) в одном месте , то встанет вопрос ее актуальности - тогда можно использовать однонаправленную репликацию нужных таблиц. Можно собрать физически все БД в одном месте (на одном сервере), но так и не объединять в одну БД, просто каждая БД будет иметь свое название и тогда даже структуру таблиц менять не надо. Филиальские базы нужны для построения консолидированной отчётности раз в месяц, ну и для получения прочей информации. Таким образом, on-line доступа к филиалам нам не требуется. Зачем тогда вопросы выше ? О получении списка договоров на клиенте ? zenkВ крайнем случае - ежедневные ночные выгрузки. Когда объем каждой БД станет по несколько гиг, тогда я посмотрю на эти "ночные выгрузки" с 10-20 серверов... zenkМожно вопрос: какие версии Informix нужны для репликации - 1 Ent+ n ODS или (n+1) Ent? zenkНеобъединённые базы на одном сервере - большая проблема для клиента БД. zenk авторЕсли же нужно слить всю информацию в одну центральную БД, то без тщательного перепроектирования не обойтись. Есть еще вопросы общих справочников (можно ли их корректировать на местах или только в центре), целостности и актуальности информации, уникальных идентификаторов по всей системе, привязки к филиалам и мн.др. Проблема справочников решается организационно - редактирование части таблиц на филиалах будет запрещено. Если окажется, что филиалам нужно будет редактировать справочники (только добавлять записи), переведём справочники на Sequence с minvalue. Случай UPDATE для записей из центральной базы не рассматриваем, IMHO, это допускать нельзя. А вот про перепроектирование базы не расскажите? Именно этот вопрос интересует больше всего. Какие цели надо поставить при этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:37 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
<сарказм on> че правда что-ли? А мужики-то не знают. Остается вопрос как dbimport заливает. <сарказм off>[/quot] Хотя в твоем случае это сломает последовательность, но в твоем случае вообще в консолидированной бд сериал не нужен, там интжера хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:43 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
Не закончил ответ в предыдущий раз - случайно нажал Enter и сообщение тут же публикуется :( zenkМожно вопрос: какие версии Informix нужны для репликации - 1 Ent+ n ODS или (n+1) Ent? Проще всего посмотреть в документации - там все тщательно расписано. К тому же есть разные виды репликации, к тому же, я не знаю, какая версия у тебя... zenkНеобъединённые базы на одном сервере - большая проблема для клиента БД. А зачем стандартному клиенту работать со всеми базами ? Это явно отдельный клиент и сложностей там никаких не вижу - справочник филиалов прямо завязывается на перечень БД и т.д. zenk А вот про перепроектирование базы не расскажите? Именно этот вопрос интересует больше всего. Какие цели надо поставить при этом? Нет, не расскажу - это не маленький вопрос, к тому я не специалист в этой области. Главное - четко понимать, что вы хотите от системы в реальных условиях и не заморачиваться "на красоту". И еще один совет из жизни - "преодолевайте проблемы по мере их появления" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 12:47 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
авторХотя в твоем случае это сломает последовательность, но в твоем случае вообще в консолидированной бд сериал не нужен, там интжера хватит. Последовательность не нарушится, если на головной базе назначить MINVAL для диапазона SERIAL не минимальным, а максимальным среди всех филиалов. Так? Нет, INT нам не нужен. С SERIAL или SEQUENCE первичные ключи генерить проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 13:22 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk Последовательность не нарушится, если на головной базе назначить MINVAL для диапазона SERIAL не минимальным, а максимальным среди всех филиалов. Так? Нет, INT нам не нужен. С SERIAL или SEQUENCE первичные ключи генерить проще. Я запутался. Есть сущность. В филиале А - значение 1, в филиале B - значение 2 В консолидированной базе что должно быть? Для этих же строк? 1,2 или 101,102 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 13:52 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
1. Повторюсь - "Если каналы связи хорошие" Если каналы хорошие, то можно и терминальный доступ организовать. К тому же даже скоростные каналы на длинных дистанциях не позволяют получить малое время реакции. 2. "для выполнения консолидированных отчетов" - т.е. это не оперативная "комфортная" работа, а аналитика или отчетность , а время реакции для этих запросов играет значительно меньшую роль, главное актуальность и полнота. Не спорю. 3. + Не надо заморачиваться с репликами и копированием баз Это да, но всё остальное... Лучше уж заморочиться... 4. + Полная "свобода на местах" в части ведения справочников и остального :) Нет, так нельзя. Как я буду строить отчёт по типу договора, если на каждом филиале справочник типов договоров будет разным? 5. Если это раз в месяц, то выполняясь по ночам, время выполнения запросов вообще мало значимо. Нет, ночью будем данные забирать. А отчёты будем днём строить, когда люди работают. Зачем тогда вопросы выше ? О получении списка договоров на клиенте ? Не понял, а как без договоров отчёты по ним строить? Когда объем каждой БД станет по несколько гиг, тогда я посмотрю на эти "ночные выгрузки" с 10-20 серверов... Такие объёмы даже и не снятся. Необязательно скачивать dbexport или onunload. Можно скачивать только те записи, которые изменились со времени предыдущей закачки (на все таблицы ведутся логи). К тому же можно заранее проконтролировать наличие баз. Что делать, если при формировании "самого срочного и важного отчёта" прервётся связь с одним из филиалов? А зачем стандартному клиенту работать со всеми базами ? Это явно отдельный клиент и сложностей там никаких не вижу - справочник филиалов прямо завязывается на перечень БД и т.д. Так стандартный клиент это всё уже умеет (по одной базе). А так что получается - сделали отдельного клиента для отчётов, а через месяц некоторые цифры в отчёте удивили, захотели узнать, что это за договор такой интересный, придётся дописывать просмотр параметров договора. Постепенно в клиент для отчётов возвратится вся функциональность по просмотру данных из стандартного. авторНет, не расскажу - это не маленький вопрос, к тому я не специалист в этой области. Главное - четко понимать, что вы хотите от системы в реальных условиях и не заморачиваться "на красоту". И еще один совет из жизни - "преодолевайте проблемы по мере их появления" :) Спасибо. Хотелось поучиться на чужих ошибках :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 14:11 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис zenk Последовательность не нарушится, если на головной базе назначить MINVAL для диапазона SERIAL не минимальным, а максимальным среди всех филиалов. Так? Нет, INT нам не нужен. С SERIAL или SEQUENCE первичные ключи генерить проще. Я запутался. Есть сущность. В филиале А - значение 1, в филиале B - значение 2 В консолидированной базе что должно быть? Для этих же строк? 1,2 или 101,102 ? Если я правильно понял, о чем ты спрашиваешь. id Тип(ссылка на справочник) значение Филиал 1 (minval = 100000) 100001 1 2454545 100002 2 5666566 Филиал 2 (minval = 200000) 200001 1 45454554 200002 2 56565665 Голова (minval = 900000) 900001 1 446557767 900003 1 67677878 Подлили филиалы в голову: 100001 1 2454545 100002 2 5666566 200001 1 45454554 200002 2 56565665 900001 1 446557767 900003 1 67677878 Добавили новую запись insert into... values(0,1,898989) Получили 100001 1 2454545 100002 2 5666566 200001 1 45454554 200002 2 56565665 900001 1 446557767 900003 1 67677878 900004 1 898989 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 14:22 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenk... Если я правильно понял, о чем ты спрашиваешь. .... 900004 1 898989 А где проблема с сериал? Чем сиквенс лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 16:03 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
Здесь - ничем. Но SEQUENCE гибче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 16:34 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenkЕсли каналы хорошие, то можно и терминальный доступ организовать. К тому же даже скоростные каналы на длинных дистанциях не позволяют получить малое время реакции. Что, электроны на 100км "долго бегут" ? Что то я не понял "скоростные каналы на длинных дистанциях" :) В чем же тогда измеряется "скорость канала" ? Ведь это и есть пропускная способность в единицу времени (которая меряется по самому плохому сегменту) и от расстояния уж никак не зависит... zenk[quot ]4. + Полная "свобода на местах" в части ведения справочников и остального :) Нет, так нельзя. Как я буду строить отчёт по типу договора, если на каждом филиале справочник типов договоров будет разным? Я , вообще то, и в кавычки брал и смайлик в конце ставил.... А ты мне рассказываешь, что так нельзя. zenk 5. Если это раз в месяц, то выполняясь по ночам, время выполнения запросов вообще мало значимо. Нет, ночью будем данные забирать. А отчёты будем днём строить, когда люди работают. А что мешает в пакетном режиме строить ежемесячные отчеты ? Много интеллекта надо, чтобы выбрать форму и дату отчета ? Ну, это я так, в сторону :) zenkЗачем тогда вопросы выше ? О получении списка договоров на клиенте ? Не понял, а как без договоров отчёты по ним строить? Я о другом, если не нужна оперативная и распределенная обработка транзакций, то зачем тогда спрашивать о виде селекта... [quot zenk] Необязательно скачивать dbexport или onunload. Можно скачивать только те записи, которые изменились со времени предыдущей закачки (на все таблицы ведутся логи). К тому же можно заранее проконтролировать наличие баз. Если ты начнешь "изобретать велосипед", т.е. строить свою систему репликации, то я тебе не завидую - там очень много подводных камней, о которых ты еще и не задумывался (на вскидку - в филиале упал сервер и восстановили по состоянию на сутки назад, а пропавшая информация уже ушла наверх...). А другие уже подумали и сделали. Поэтому, если уж и использовать репликацию, то родную информиксовскую, которая позволяет тиражировать срезы таблиц и построена не на "тяжелых" триггерах. zenk Что делать, если при формировании "самого срочного и важного отчёта" прервётся связь с одним из филиалов? А это вопрос к чему или к кому ? Я тебя вовсе не убеждаю использовать распределенные запросы или реплики или копировать БД. В каждом из способов много нюансов и сложностей и все зависит от твоих целей и задач. А также способности все продумать и решить возникшие проблемы. zenk[quot ]А зачем стандартному клиенту работать со всеми базами ? Это явно отдельный клиент и сложностей там никаких не вижу - справочник филиалов прямо завязывается на перечень БД и т.д. Так стандартный клиент это всё уже умеет (по одной базе). А так что получается - сделали отдельного клиента для отчётов, а через месяц некоторые цифры в отчёте удивили, захотели узнать, что это за договор такой интересный, придётся дописывать просмотр параметров договора. Постепенно в клиент для отчётов возвратится вся функциональность по просмотру данных из стандартного. Ну так сделайте наоборот - добавьте в стандартный клиент необходимую дополнительную функциональность для работы с многими базами, которая добавляется только нужным людям. Не пойму, в чем проблема. авторНет, не расскажу - это не маленький вопрос, к тому я не специалист в этой области. Главное - четко понимать, что вы хотите от системы в реальных условиях и не заморачиваться "на красоту". И еще один совет из жизни - "преодолевайте проблемы по мере их появления" :) Спасибо. Хотелось поучиться на чужих ошибках :-) У меня впечатление, что ты себе систему некую уже придумал, а получив другой совет, возражаешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 16:56 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
vasilisУ меня впечатление, что ты себе систему некую уже придумал, а получив другой совет, возражаешь :) В спорах рождается истина :-) Так система ведь действительно есть. Требуется расширить её функционал за счёт возможности работы с консолидированной базой. Вариант с распределёнными запросами требует переписывания всего софта. Поэтому этот вариант мне и не нравится. Возможно, в других условиях он мне и приглянулся бы. А для варианта с объединённой базой ничего переписывать не надо, всё уже есть, требуется только оптимально это объединение осуществить. Кроме того, первый вариант быстрее обрабатывает запросов и меньше зависит от состояния связи. Хуже только актуальность, но она нам и не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 17:13 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
zenkДобрый день! Допустим, есть головная контора и филиалы. Везде стоят базы одинаковой структуры, ссылочная целостность базируется на PRIMARY KEYS по полям SERIAL. Аналогичная проблема встаёт перед разработчиками приложений для Enterprise Replication - им IBM не рекомендует использовать тип serial либо рекомендует ввести дополнительный столбец - идентификатор филиала, и строить Primary Key по двум столбцам. Разделить диапазоны значений serial для разных филиалов может быть быстрым способом решения проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 15:54 |
|
||
|
Консолидация баз
|
|||
|---|---|---|---|
|
#18+
я использую двойной праймэри ключ , состоящий из сериал столбца и номера подразделения. Никаких проблем не наблюдаю. Хотя и рампределение по диапазонам тоже использую, но только в таблице договоров, чтобы получить сквозную нумерацию, а таблицы в которых учитываются различные операции все имеют двойной ключ и сливаются в конце дня в центральную БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 21:08 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=44&tid=1608947]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 374ms |

| 0 / 0 |
