Я должен выполнить поиск по миллионам записей. Для этого у меня есть спокойный сервис (сторонний API), который выдает 25 записей за каждый отдельный вызов. В каждом ответе я получаю массив из 25 записей, номер страницы и общее количество страниц, т. Е. Если я задаю pagenumber = 2, то будут приходить следующие 25 записей. номер, сделайте вызов для каждого pageNumber и добавьте запись в каждом вызове в предыдущей коллекции. Ограничение - после 100 вызовов / минута сервер (третье лицо) начинает отклонять вызовы. И поэтому я никогда не получаю полные данные и в конечном итоге не выполняю требуемый поиск.
Я попытался перебрать все страницы.
Я попробовал свои силы в упругом поиске, но, думаю, у меня не хватило понимания для его реализации.
public class EmpResponse
{
public int Pages;
public int PageNumber;
public List<Employee> TotalRecords;
public Employee GetAllEmployees(string empId= "", string EmpName = "", string Manager = "")
{
string url = "thirdPartyurl?PageNumber=";
string baseUrl = "thirdPartyurl?PageNumber=1";
EmpResponse baseRes = JsonConvert.DeserializeObject<EmpResponse>(DataHelpers.GetDataFromUrl(baseUrl));
for (int i = 2; i <= baseRes.Pages; i++)
{
EmpResponse currentRes = JsonConvert.DeserializeObject<EmpResponse>(DataHelpers.GetDataFromUrl(url + i));
if (currentRes != null)
foreach (var item in currentRes.TotalRecords)
{
baseRes.TotalRecords.Add(item);
}
}
return baseRes;
}
}
DataHelpers.GetDataFromUrl используется для вызова URL-адреса и для получения ответа, отдельного для этого URL-адреса.
теперь baseRes.Pages получается равным 100000 (т.е. baseRes.Pages = 100000), что означает 100000 страниц, что означает 100000 вызовов. Это занимает очень много времени, и если количество вызовов превышает 100 в минуту, сторонний API начинает отклонять вызов. Так как получить все данные с этим ограничением и быстро.