2016-11-21 9 views
1

У меня есть более общий вопрос о том, как реализовать ленивую загрузку в моих проектах для списков, сеток и т. Д. Мой вопрос не в конкретной структуре или языке, потому что Я разрабатываю различные типы проектов с помощью C#, java, android, winforms и т. Д.Реализация ленивой загрузки списков с БД, клиентом и бэкендом

Мой вопрос: как реализовать эту ленивую модель загрузки в среде RESTful?

Например,, У меня есть база данных с около 2 миллионами данных. Пользователь выбирает несколько фильтров на стороне клиента, а ответ сервера - 100 000 записей. Это очень важно, чтобы показать им все, что время для «загрузки и рендеринга» элементов в элементе управления списком занимает несколько минут (в плохие дни). Лучший способ - показать пользователю первые 200 элементов и загрузить необходимые блоки по мере необходимости.

Другой пример - поиск изображений на мобильном устройстве. Если результат поиска составляет около 10.000, мобильный трафик для загрузки изображения будет взрываться. Поэтому лучше отобразить до 20 записей, и если пользователь прокручивает вниз, например, загружаются следующие 20.

Итак, как я могу архивировать это на стороне backend/db/client? К сожалению, я не могу запросить «выберите 200 до 400 из таблицы, где ...».

В некоторых внешних API-интерфейсах я могу отправить «токен страницы», чтобы получить следующий блок элементов. Но как узнать, на какую «страницу» пользователь просит?

Плохой способ, который я пробовал, - загрузить с каждым запросом всю коллекцию (100 000 записей в первом примере) и обслуживать только ту часть, которая необходима. Но это очень важно, когда количество клиентов расширяется, и 10 000 клиентов делают это каждую минуту в серверном времени.

ответ

0

Вы можете использовать разбивку на страницы для этого. Например, клиент запрашивает первую страницу записей х, так что сервер будет только получать, что из БД (см LINQ «s skip/take):

DB.Skip(pageNumber * pageSize).Take(pageSize); 

Клиент может изменить фильтр, PageNumber (" Следующий страница ") или pageSize без каких-либо проблем.