Возможный шаблон проектирования для бизнес-сценария с большим набором результатов из хранимой процедуры SQL Server
Сценарий: мне дали задачу, которая включает в себя создание веб-API, который будет принимать параметр даты в URL, как показано ниже:
https://server/controllerrouting/payments?requestdate=08/13/2016
Этот API вызовет хранимую процедуру, которая использует дату из URL в операторе выбора. Затем API вернет набор результатов в виде ответа json вызывающему приложению, которое не будет внешним приложением.
Проблема: обычно это не проблема для возврата набора результатов, возвращенного при выполнении хранимой процедуры. Однако ожидается, что результирующий набор вернет до 350000 записей по 350 байтов для каждой записи.
Возможное дизайнерское решение?
Я смотрю на использование PushStreamContent
Класс и отправка данных в поток для потребителя.
Вопрос
После выполнения хранимой процедуры и чтения набора результатов, используя DataReader
Могу ли я отправить каждую запись в поток в этой точке в логике?
Что-то вроде:
if (reader.HasRows)
{
while (reader.Read())
{
1.format record
2.serialize to json
3.push record to stream
}
}
else
{
return msg("No rows found");
}
reader.Close();
Как правильно это сделать? Можно ли просто вернуть большой объект json клиенту и не беспокоиться о необходимости потоковой передачи данных? Нужно ли рассматривать подкачку с помощью хранимой процедуры или просто получить все записи сразу, а затем передавать клиенту только порцию за раз? Мне трудно понять, как лучше всего атаковать эту ситуацию.