Справка по проектированию параллельной обработки больших двоичных объектов Azure и массового копирования в базу данных S ⇐ C#
Справка по проектированию параллельной обработки больших двоичных объектов Azure и массового копирования в базу данных S
Мне нужно получить файлы больших двоичных объектов из хранилища Azure, прочитать их, получить данные, обработать их и сохранить в базе данных. Количество данных, полученных из большого двоичного объекта, велико, т. е. около 40 000 записей на файл. В папке 70 таких файлов.
Вот как я это разработал:
[*]Я использую Parallel.Foreach для списка файлов больших двоичных объектов с максимальным параллелизмом 4. [*]В каждом цикле я извлекаю из потока большой двоичный объект (метод OpenRead), считываю его и заполняю таблицу данных. Если размер таблицы данных равен 10 000, я вызову SqlBulkCopy и вставлю данные в базу данных.
В одной папке blob находится 70 файлов.
Parallel.Foreach { // Потоковый файл больших двоичных объектов // Создаём таблицу данных по каждому элементу в файле { Аддтодататабле если (таблица данных > 5000) { Массовое копирование в БД. Очистить таблицу данных } } // Удалить таблицу данных } Я обнаружил некоторые наблюдения: когда я увеличиваю количество параллельных вычислений, время, необходимое для обработки одного файла, увеличивается. Это потому, что я параллельно открываю несколько потоков больших двоичных объектов? Кроме того, несколько параллельных вычислений приводят к одновременному хранению большего количества данных в памяти.
Мне хотелось бы знать две вещи:
[*]
Я хотел бы попробовать другой дизайн, в котором я могу сохранить одну таблицу данных и заполнить ее из параллельного foreach. Затем, если оно достигнет 10 КБ записей, мне придется сохранить их в БД и очистить. Я не знаю, как это реализовать.
[*]
Если есть лучший подход с точки зрения более быстрой обработки файлов.
Мне нужно получить файлы больших двоичных объектов из хранилища Azure, прочитать их, получить данные, обработать их и сохранить в базе данных. Количество данных, полученных из большого двоичного объекта, велико, т. е. около 40 000 записей на файл. В папке 70 таких файлов.
Вот как я это разработал:
[*]Я использую Parallel.Foreach для списка файлов больших двоичных объектов с максимальным параллелизмом 4. [*]В каждом цикле я извлекаю из потока большой двоичный объект (метод OpenRead), считываю его и заполняю таблицу данных. Если размер таблицы данных равен 10 000, я вызову SqlBulkCopy и вставлю данные в базу данных.
В одной папке blob находится 70 файлов.
Parallel.Foreach { // Потоковый файл больших двоичных объектов // Создаём таблицу данных по каждому элементу в файле { Аддтодататабле если (таблица данных > 5000) { Массовое копирование в БД. Очистить таблицу данных } } // Удалить таблицу данных } Я обнаружил некоторые наблюдения: когда я увеличиваю количество параллельных вычислений, время, необходимое для обработки одного файла, увеличивается. Это потому, что я параллельно открываю несколько потоков больших двоичных объектов? Кроме того, несколько параллельных вычислений приводят к одновременному хранению большего количества данных в памяти.
Мне хотелось бы знать две вещи:
[*]
Я хотел бы попробовать другой дизайн, в котором я могу сохранить одну таблицу данных и заполнить ее из параллельного foreach. Затем, если оно достигнет 10 КБ записей, мне придется сохранить их в БД и очистить. Я не знаю, как это реализовать.
[*]
Если есть лучший подход с точки зрения более быстрой обработки файлов.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передать URL-адрес пути к файлу больших двоичных объектов Azure в методе ChoParquetReader?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как передать URL-адрес пути к файлу больших двоичных объектов Azure в методе ChoParquetReader?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-