Перемещение больших объемов данных из одной базы данных в другую порциями - PullRequest
1 голос
/ 03 декабря 2010

У меня есть таблица с минимум 12 миллионами строк в таблице, которая выглядит следующим образом:

Id (varchar(10) | Image (varbinary(max)
---------------- -------------------------
X123456789      | 0x....
1121132121      | 0x....
JF13232131      | 0x....

Каким был бы эффективный способ перемещения данных из этой таблицы в другую по частям. Я пишу простое консольное приложение .net, чтобы сделать это, и я боюсь, что, когда я попытаюсь загрузить все 12 миллионов строк одновременно, мое приложение вылетит.

Спасибо за любую помощь

Приложение № 1: исходная база данных - oracle, а конечная база данных - sql server

Приложение № 2: Я также конвертирую данные изображения из формата tiff в формат jpeg

Ответы [ 5 ]

2 голосов
/ 04 декабря 2010

"Каким был бы эффективный способ переместить данные из этой таблицы в другую стол в кусках "

Вы думаете, что вам нужно перемещать данные порциями, потому что вы катите инструмент вручную, а не используете SSIS. Вы думаете, что не можете использовать SSIS, потому что хотите выполнить «некоторую конвертацию / перевод данных после первоначального извлечения». Какие преобразования вы хотите применить, которые, по вашему мнению, вы не можете сделать с помощью SSIS? Я имею в виду, что SSIS может делать множество вещей. Узнать больше .

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


"Я конвертирую изображения из TIFF в JPEG. Может ли SSIS сделать это для меня? "

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

2 голосов
/ 03 декабря 2010

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

2 голосов
/ 03 декабря 2010

Прежде всего, я бы не пытался перемещать 12M строк через приложение .NET.Я бы использовал такой инструмент, как SSIS (SQL Server Integrated Services), чтобы сделать это.SSIS очень быстр, может поддерживать транзакции и поддерживает сложные преобразования данных.Служба SSIS была разработана для таких целей.

Однако, если вы должны сделать это в приложении .NET.Я бы, вероятно, читал что-то вроде строк от 1K до 5K за раз, вставлял их в целевую базу данных и получал следующие строки от 1K до 5K и т. Д. Но это будет намного медленнее, чем через такой инструмент, как SSIS.

1 голос
/ 04 декабря 2010

Для решения этой проблемы я бы подключился к базе данных Oracle в .Net и использовал DataReader для считывания данных построчно.Затем обработайте каждую строку для преобразования изображения, а затем просто вставьте новые данные в базу данных Sql Server.Теперь я представляю, что это не будет быстрым делом, но я не вижу никакой причины, по которой это может произойти сбой, поскольку данные передаются из Oracle, а затем отправляются прямо на Sql Server.Если вы хотите, чтобы он работал немного быстрее, не было бы слишком сложно, чтобы несколько потоков выполняли преобразование и вставляли его в Sql Server.

0 голосов
/ 03 декабря 2010

Вы смотрели на BCP ?У нас была похожая проблема, и она отлично сработала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...