0

У меня есть таблица с миллионами строк. Он имеет данные регистрации. Я хочу переместить данные в текстовые файлы. Каждый день данные должны входить в собственный текстовый файл. Я в среде .net. Каков эффективный способ ее достижения?SQL для архивации текста с использованием .net и параллельной обработки

Я хочу использовать параллельную обработку, потому что у нас есть многоплодные серверы со многими ядрами. Некоторые варианты, о которых я могу думать, следующие:

  1. Имеют параллельные считыватели данных. Каждый читатель запрашивает часть данных. Как мне управлять общими соединениями с этим подходом? Также, если бы я пошел по этому маршруту, мне не пришлось бы нарушать нормальное использование для пользователей. Другая проблема, которую я вижу при таком подходе, - это управлять моими потоками и устанавливать верхний предел, тогда как Parallel.ForEach будет намного проще.

  2. Модель производителя-потребителя: один поток считывает данные и ставит их в очередь. Несколько авторов потребляют данные из памяти и записывают их в текстовые файлы.

Я открыт для PetaPoco/NPoco. В идеале я хочу использовать Parallel.ForEach, не слишком усложняя код многопоточности.

+1

Это звучит как задание для BCP (https://msdn.microsoft.com/en-us/library/ms162802(v=sql.130).aspx). У вас может быть задание агента SQL, которое ежедневно экспортирует журналы. BCP очень эффективен при экспорте данных, и вы можете использовать запросы для выбора данных для экспорта. Вы также можете рассмотреть возможность добавления разделов таблиц в микс. Вот [один пример] (https://www.mssqltips.com/sqlservertip/2780/archiving-sql-server-data-using-partitioning/) того, что можно сделать с разделами. – PHeiberg

ответ

0

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