Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Загрузка таблиц в режиме онлайн / 9 сообщений из 9, страница 1 из 1
28.10.2009, 22:11
    #36278344
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
Господа, такой вопрос.

Есть большая таблица (пусть будет несколько десятков миллионов записей) которая читается 24 часа 7дней в неделю.

Таблица реплицируется.

Данные в неё нужно помещать из текстовых файлов, при этом данные должны синхронизоваться, т.е. добавляться или обновляться.

Как наиболее оптимально осуществить помещение данных?
Если их много, то как не залочить таблицу обновлениями, и при этом ещё обеспечить, чтобы все изменения нормально реплицировались?

Я никогда не сталкивался с такими задачами на практике.

Чисто в теории, на ум приходит создать отдельную базу и в ней прмежуточную партиципрованную таблицу. В базе выставить select into bulkcopy, чтобы небыло логирования, после чего грузить данные пачками определённого размера использую параллельную BCP c ключами First and Last и проставляя в таблице номер пачки.
Как только пачка загрузится, выполнить синхронизацию данных для этой пачки с основной таблицей - сначала обновление и потом добавление, после чего таким же образом обарботать следующую пачку.

Т.е. получается некоторый цикл продолжающийся пока все данные не будут загруженны.

Но это в теории и, к сожалению, без малейшего реального опыта с подобными задачами.

Подскажите пожалуйста, что может быть неправильно в этом подходе и как подобные задачи могут решаться.

Заранее большое спасибо.
...
Рейтинг: 0 / 0
28.10.2009, 23:41
    #36278433
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
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
...
Рейтинг: 0 / 0
29.10.2009, 16:08
    #36280183
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
Большое спасибо за отклик
>RLL тут рулит, я считаю. На Insert конкурентные пользователи вообще
>ничего не чувствуют, а на UPDATE -- хуже, конечно, потому как
>там надо ещё и о плане запроса думать, но всё же тоже должно быть
>хорошо.

Я боюсь, что если делать UPDATE на большое количество записей (скажем миллион), то RLL, скорее всего не поможет. Произойдёт эскалация блокировки до табличного уровня.


>Я не очень понял с репликацией.
>Если это источник, то репликация сосёт данные из лога, таблица
>тут будет не задействована. Елси она -- приёмник, то, в общем,
>будет всё то же самое, что я выше описал -- т.е. тоже всё ОК.

Загружаемая таблица - это источник.

Но такой вопрос - если сразу обновить/вставить миллион записей, то выдержит ли репликация?

Как-то чутьё подсказывает, что не надо такие большие транзакции делать, отсюда и идея, разбить данные на пачки.
В придачу, если что-то не так пойдёт, то нужно будет перегрузить только бракованную пачку.

Т.к. в реальной жизни пока не получается получить опыт работы с реально большими объемами, то хотелось бы узнать мнение практикующих спецов.

Заранее большое спасибо.
...
Рейтинг: 0 / 0
29.10.2009, 19:26
    #36280859
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
Kru пишет:

> Я боюсь, что если делать UPDATE на большое количество записей (скажем
> миллион), то RLL, скорее всего не поможет. Произойдёт эскалация
> блокировки до табличного уровня.

Так в том и трюк, чтобы эскалацию не допускать.
Я конечно не знаю, сдюжит ли ваш сервер такую большую транзакцию
без эскалации. Ну и можно кусками делать.


> Загружаемая таблица - это источник.
>
> Но такой вопрос - если сразу обновить/вставить миллион записей, то
> выдержит ли репликация?

Чаще всего, она это не выдерживает.

К тому же учти, что один UPDATE на миллион записей на реплике
превратиться в миллион UPDATE-ов по 1-ой записи.

> Как-то чутьё подсказывает, что не надо такие большие транзакции делать,
> отсюда и идея, разбить данные на пачки.

Ну, очень хорошая идея. У нас на продакшн серверах например
запрещено большими пачками менять данные (разработчикам).


> Т.к. в реальной жизни пока не получается получить опыт работы с реально
> большими объемами, то хотелось бы узнать мнение практикующих спецов.

Ну, я не могу сказать, что мы такое вот часто делаем, но
в общем ты движешься правильной дорогой.

Маленькие пачки транзакций, RLL, настройка эскалации.

А в идеале хорошо бы вообще эти UPDATE-ы раздельно провести
на двух или сколько у тебя там серверах, чтобы через
очередь репликации не тащить миллион записей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29.10.2009, 22:25
    #36281110
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
Большое спасибо.
...
Рейтинг: 0 / 0
30.10.2009, 12:59
    #36282114
ASE 12.5 Загрузка таблиц в режиме онлайн
Kru,

Для Вашего случая я бы порекомендовал:

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc00783.1520/html/nfg_rs/BAJFIJFA.htm

Нужен соответственно ASE 15.0.3 и RS 15.2.
...
Рейтинг: 0 / 0
30.10.2009, 16:39
    #36282816
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
забыл пароль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 репликация ведь придётся создавать
точно такие-же промежуточные таблицы и на подписчиках.

Так что, такой вариант скорее всего не подойдёт.
...
Рейтинг: 0 / 0
30.10.2009, 17:43
    #36282998
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
Kru,

Решал аналогичную задачу, правда сервер был ASA
В итоге от репликаций таких таблиц с такими режимами добавлений, обновлений отказались.
Либо передаем файлы в точки и там запускаем обновления-добавления.
Либо таблица присутствует в одном месте, остальные точки(клиенты) получают данные из нее без использования репликаций(прокси таблицы, удаленные процедуры, веб-сервисы и т.п.)
Что выбрать зависит от задачи(кто читает, как читает)
Я сделал по второму варианту, у меня не только клиенты баз к нее обращаются.
Первый вариант может быть полезен, если критично обязательное наличие данных в локальной базе без связи с центром.
...
Рейтинг: 0 / 0
31.10.2009, 17:28
    #36283852
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Загрузка таблиц в режиме онлайн
antandKru,

Решал аналогичную задачу, правда сервер был ASA
В итоге от репликаций таких таблиц с такими режимами добавлений, обновлений отказались.
Либо передаем файлы в точки и там запускаем обновления-добавления.
Либо таблица присутствует в одном месте, остальные точки(клиенты) получают данные из нее без использования репликаций(прокси таблицы, удаленные процедуры, веб-сервисы и т.п.)
Что выбрать зависит от задачи(кто читает, как читает)
Я сделал по второму варианту, у меня не только клиенты баз к нее обращаются.
Первый вариант может быть полезен, если критично обязательное наличие данных в локальной базе без связи с центром.

Добрый день,
большое спасибо за то что поделились опытом.
Оба варианта кажутся одинаково рабочими.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Загрузка таблиц в режиме онлайн / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]