У мене буде база даних SQL Server 2012 і таблиця з 3 мільйонами рядків і, можливо, 50 стовпців. Що буде найшвидшим способом для безперервного фонового процесу .net (можливо, видає якусь команду SQL або Powershell), щоб експортувати його в текстовий файл, по одному рядку для кожного рядка даних? Процес .net повинен знати, коли експортування було завершено або чи була помилка. Тип даних буде всім int
або nvarchar
.
Я припускаю, що чистий код C #, що використовує ado.net для виконання select *
команди та перенесення циклічного перечитника даних та запис у файл для кожного запису, буде повільним, і я не можу паралелізувати це.
В ідеалі експорт буде у віддалену загальну мережеву папку, а не в локальну папку на машині SQL Server. SQL Server буде кластером HA. Чи краще для цього підходить SSIS, не потрібна трансформація даних?
Процес .Net запускається на машині A, SQL Server на машині B, а кінцеве призначення файлу - це мережева частка. Один з варіантів - SQL-сервер записує файл безпосередньо в мережеву спільну доступність. Інший варіант - SQL Server записує на машину A, а потім, коли файл записується, .net-процес копіює його в мережу. У мене немає офіційного угоди про угод, але очікую 30 хвилин - 1 год для запису файлу.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- звідки буде працювати програма .NET? Найгірше, це може означати, що дані мають переміщатися через 2 мережеві стрибки, що, мабуть, буде найбільшим вузьким місцем. Також кількість рядків дещо не має значення - який приблизний загальний розмір даних? Чи є у вас домовленості про рівень обслуговування, які потрібно зустріти для цього процесу?