Орлеан — массовый импорт данных

В настоящее время я изучаю MS Orleans для нашей организации. Я понимаю, что Orleans Grains будет оставаться синхронизированным с БД до тех пор, пока все обновления БД будут поступать через зерна.

Но что произойдет, если есть какой-то массовый процесс (например, обработка файла данных), который обновляет/вставляет/удаляет записи в БД?

Есть ли какой-то процесс или шаблон, который можно использовать с Orleans для этого? Или нам нужно обрабатывать весь массовый процесс через Grains? В случае, если мы обрабатываем массовые операции через зерна - мы делаем это, обновляя каждое зерно (кажется очень дорогим, если каждое зерно обновляет себя в БД) или есть какой-то массовый шаблон, который можно использовать для принудительного «обновления» всех затронутых зерен?

Ответ может быть очевиден. Я не нашел ничего в документации об этих сценариях.

Мы будем использовать Orleans в качестве локальной установки с сервером MS-SQL.

Редактировать:

Я имею в виду процесс, который обновляет данные о N зернах. Наличие одного вызова, который обновляет 1000 записей, намного лучше для sql, чем 1000 вызовов, которые обновляют одну запись. Конкретным примером может быть обновление запасов: каждый запас продукта будет зерном. Каждые 15 минут или около того от третьей стороны приходил файл, информирующий об изменениях количества запасов, которые произошли вне приложения. Это должно обновляться в базе данных и отражаться в зернах. Файл может иметь 10k записей...


person user2995891    schedule 18.10.2017    source источник
comment
вам будет гораздо лучше использовать зерна для управления доступом к данным   -  person BozoJoe    schedule 19.10.2017
comment
Спасибо за ответ. Есть ли способ сделать это с помощью зерна? Я имею в виду процесс, который обновляет данные о N зернах. Наличие одного вызова, который обновляет 1000 записей, намного лучше для sql, чем 1000 вызовов, которые обновляют одну запись. Конкретным примером может быть обновление запасов: каждый запас продукта будет зерном. Каждые 15 минут или около того от третьей стороны приходил файл, информирующий об изменениях количества запасов, которые произошли вне приложения. Это должно обновляться в базе данных и отражаться в зернах. Файл может иметь 10k записей...   -  person user2995891    schedule 19.10.2017
comment
вы должны добавить свои комментарии к вопросу. Вы уверены, что вам «нужно» использовать модель актера? Есть ли в ассортименте продуктов независимая функциональность, которой модель актора больше соответствует, чем операция массового обновления, о которой вы говорите?   -  person BozoJoe    schedule 19.10.2017


Ответы (1)


У вас есть несколько вариантов.

1) Загружать через зерна - зерна будут кэшировать данные, а также хранить в БД. Это частично противоречит вашей цели эффективной загрузки БД, поэтому может быть не тем, что вам нужно.

2) Массовая загрузка непосредственно в БД, но использование зерна для доступа и обработки/обслуживания данных. Зерна будут считывать данные из БД по первому запросу, кэшировать их, служить для дальнейших запросов. Кроме того, все будущие обновления данных будут проходить через гранулы. Обычно это самый распространенный шаблон.

3) Если вам тоже нужна периодическая обработка данных, даже при отсутствии запросов на обслуживание, то после массовой загрузки зерен можно "массовым пинком" зерен запустить периодическую обработку. В этом варианте вы напишете цикл контроллера (например, клиентскую логику), который будет просто вызывать «Init» в набор зерен, один за другим (но параллельно: параллельно вызывать Init на X (X ~ 100) и ждать их все вместе), а затем сделать следующую партию. Зерна запустят таймер или напоминание при инициализации.

person Gabi Kliot    schedule 20.10.2017
comment
Спасибо за подробный ответ! Очень признателен - person user2995891; 22.10.2017