|
|
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Господа, такой вопрос. Есть большая таблица (пусть будет несколько десятков миллионов записей) которая читается 24 часа 7дней в неделю. Таблица реплицируется. Данные в неё нужно помещать из текстовых файлов, при этом данные должны синхронизоваться, т.е. добавляться или обновляться. Как наиболее оптимально осуществить помещение данных? Если их много, то как не залочить таблицу обновлениями, и при этом ещё обеспечить, чтобы все изменения нормально реплицировались? Я никогда не сталкивался с такими задачами на практике. Чисто в теории, на ум приходит создать отдельную базу и в ней прмежуточную партиципрованную таблицу. В базе выставить select into bulkcopy, чтобы небыло логирования, после чего грузить данные пачками определённого размера использую параллельную BCP c ключами First and Last и проставляя в таблице номер пачки. Как только пачка загрузится, выполнить синхронизацию данных для этой пачки с основной таблицей - сначала обновление и потом добавление, после чего таким же образом обарботать следующую пачку. Т.е. получается некоторый цикл продолжающийся пока все данные не будут загруженны. Но это в теории и, к сожалению, без малейшего реального опыта с подобными задачами. Подскажите пожалуйста, что может быть неправильно в этом подходе и как подобные задачи могут решаться. Заранее большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2009, 22:11 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Kru пишет: > Есть большая таблица (пусть будет несколько десятков миллионов записей) > которая читается 24 часа 7дней в неделю. > > Таблица реплицируется. > > Данные в неё нужно помещать из текстовых файлов, при этом данные должны > синхронизоваться, т.е. добавляться или обновляться. > > Как наиболее оптимально осуществить помещение данных? > Если их много, то как не залочить таблицу обновлениями, и при этом ещё > обеспечить, чтобы все изменения нормально реплицировались? RLL тут рулит, я считаю. На Insert конкурентные пользователи вообще ничего не чувствуют, а на UPDATE -- хуже, конечно, потому как там надо ещё и о плане запроса думать, но всё же тоже должно быть хорошо. > Чисто в теории, на ум приходит создать отдельную базу и в ней > прмежуточную партиципрованную таблицу. В базе выставить select into > bulkcopy, чтобы небыло логирования, после чего грузить данные пачками > определённого размера использую параллельную BCP c ключами First and > Last и проставляя в таблице номер пачки. > Как только пачка загрузится, выполнить синхронизацию данных для этой > пачки с основной таблицей - сначала обновление и потом добавление, после > чего таким же образом обарботать следующую пачку. Что-то намудрено. Попробуй просто тупо в лоб решение сначала, с таблицей на DOL/RLL. Я не очень понял с репликацией. Если это источник, то репликация сосёт данные из лога, таблица тут будет не задействована. Елси она -- приёмник, то, в общем, будет всё то же самое, что я выше описал -- т.е. тоже всё ОК. Ну и, на DOL не забывай REORG пускать периодически. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2009, 23:41 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за отклик >RLL тут рулит, я считаю. На Insert конкурентные пользователи вообще >ничего не чувствуют, а на UPDATE -- хуже, конечно, потому как >там надо ещё и о плане запроса думать, но всё же тоже должно быть >хорошо. Я боюсь, что если делать UPDATE на большое количество записей (скажем миллион), то RLL, скорее всего не поможет. Произойдёт эскалация блокировки до табличного уровня. >Я не очень понял с репликацией. >Если это источник, то репликация сосёт данные из лога, таблица >тут будет не задействована. Елси она -- приёмник, то, в общем, >будет всё то же самое, что я выше описал -- т.е. тоже всё ОК. Загружаемая таблица - это источник. Но такой вопрос - если сразу обновить/вставить миллион записей, то выдержит ли репликация? Как-то чутьё подсказывает, что не надо такие большие транзакции делать, отсюда и идея, разбить данные на пачки. В придачу, если что-то не так пойдёт, то нужно будет перегрузить только бракованную пачку. Т.к. в реальной жизни пока не получается получить опыт работы с реально большими объемами, то хотелось бы узнать мнение практикующих спецов. Заранее большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 16:08 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Kru пишет: > Я боюсь, что если делать UPDATE на большое количество записей (скажем > миллион), то RLL, скорее всего не поможет. Произойдёт эскалация > блокировки до табличного уровня. Так в том и трюк, чтобы эскалацию не допускать. Я конечно не знаю, сдюжит ли ваш сервер такую большую транзакцию без эскалации. Ну и можно кусками делать. > Загружаемая таблица - это источник. > > Но такой вопрос - если сразу обновить/вставить миллион записей, то > выдержит ли репликация? Чаще всего, она это не выдерживает. К тому же учти, что один UPDATE на миллион записей на реплике превратиться в миллион UPDATE-ов по 1-ой записи. > Как-то чутьё подсказывает, что не надо такие большие транзакции делать, > отсюда и идея, разбить данные на пачки. Ну, очень хорошая идея. У нас на продакшн серверах например запрещено большими пачками менять данные (разработчикам). > Т.к. в реальной жизни пока не получается получить опыт работы с реально > большими объемами, то хотелось бы узнать мнение практикующих спецов. Ну, я не могу сказать, что мы такое вот часто делаем, но в общем ты движешься правильной дорогой. Маленькие пачки транзакций, RLL, настройка эскалации. А в идеале хорошо бы вообще эти UPDATE-ы раздельно провести на двух или сколько у тебя там серверах, чтобы через очередь репликации не тащить миллион записей. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 19:26 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 22:25 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Kru, Для Вашего случая я бы порекомендовал: http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00783.1520/html/nfg_rs/BAJFIJFA.htm Нужен соответственно ASE 15.0.3 и RS 15.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 12:59 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
забыл парольKru, Для Вашего случая я бы порекомендовал: http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00783.1520/html/nfg_rs/BAJFIJFA.htm Нужен соответственно ASE 15.0.3 и RS 15.2. Большое спасибо, но для того чтобы использовать statement репликация ведь придётся создавать точно такие-же промежуточные таблицы и на подписчиках. Так что, такой вариант скорее всего не подойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 16:39 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
Kru, Решал аналогичную задачу, правда сервер был ASA В итоге от репликаций таких таблиц с такими режимами добавлений, обновлений отказались. Либо передаем файлы в точки и там запускаем обновления-добавления. Либо таблица присутствует в одном месте, остальные точки(клиенты) получают данные из нее без использования репликаций(прокси таблицы, удаленные процедуры, веб-сервисы и т.п.) Что выбрать зависит от задачи(кто читает, как читает) Я сделал по второму варианту, у меня не только клиенты баз к нее обращаются. Первый вариант может быть полезен, если критично обязательное наличие данных в локальной базе без связи с центром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 17:43 |
|
||
|
ASE 12.5 Загрузка таблиц в режиме онлайн
|
|||
|---|---|---|---|
|
#18+
antandKru, Решал аналогичную задачу, правда сервер был ASA В итоге от репликаций таких таблиц с такими режимами добавлений, обновлений отказались. Либо передаем файлы в точки и там запускаем обновления-добавления. Либо таблица присутствует в одном месте, остальные точки(клиенты) получают данные из нее без использования репликаций(прокси таблицы, удаленные процедуры, веб-сервисы и т.п.) Что выбрать зависит от задачи(кто читает, как читает) Я сделал по второму варианту, у меня не только клиенты баз к нее обращаются. Первый вариант может быть полезен, если критично обязательное наличие данных в локальной базе без связи с центром. Добрый день, большое спасибо за то что поделились опытом. Оба варианта кажутся одинаково рабочими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2009, 17:28 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=36282114&tid=2010849]: |
0ms |
get settings: |
25ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 501ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...