Веб-сервисы: более частые «маленькие» звонки или менее частые «большие» звонки - PullRequest
1 голос
/ 22 марта 2010

В целом, лучше ли, чтобы веб-приложение выполняло много вызовов веб-службе, получая меньшие порции данных, или чтобы веб-приложение выполняло меньше вызовов и получало большие порции данных?

В частности, я создаю приложение Silverlight, которое должно получать большие объемы данных с сервера в ответ на запрос, созданный пользователем.Каждый запрос может возвращать от нескольких сотен записей до нескольких тысяч.Каждая запись имеет около тридцати полей данных в основном десятичного типа.Раньше я сталкивался с ситуацией, когда размер полезной нагрузки ответа превышал максимально допустимый для службы.

Мне интересно, лучше ли сократить (более эффективно для сервера / клиента / веб-службы) сокращение?эта полезная нагрузка по вертикали - получение всех значений для одного поля с каждым вызовом - или по горизонтали - получение пакетов полных записей с каждым вызовом.Или это имеет значение?

Ответы [ 4 ]

4 голосов
/ 22 марта 2010

Удивительно, но я обнаружил, что выборка данных в два или даже в четыре раза больше, чем вам нужно, почти всегда ускоряет удвоение количества вызовов, чтобы обеспечить лучшие фильтры.

Я обнаружил, чтоможет передать 200K в то же время, что я мог выдать один новый запрос.Для большинства точно настроенных запросов требовалось около 3 КБ, а для обычных - 50–100 КБ.

Если вы превышаете размер полезной нагрузки, увеличиваете размер полезной нагрузки или создаете потоковый CGI на сервере.Так будет лучше.

3 голосов
/ 22 марта 2010

Получение меньшего набора данных будет означать, что пользователю придется ждать меньше времени; что хорошо.

Но получение небольших наборов данных означает, что ему придется ждать чаще.

Одной из возможностей будет использование комбинации обоих подходов, например:

  • Для первого запроса получите только небольшой набор данных, чтобы иметь возможность быстрее отображать некоторую информацию
  • и, для следующих запросов, получите большие наборы данных, чтобы сделать меньше HTTP-запросов
    • таким образом, в то время как эти (немного более длинные) запросы выполняются, пользователю уже будет что читать.
3 голосов
/ 22 марта 2010

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

0 голосов
/ 22 марта 2010

Я бы сказал, что-то вроде пейджинга (показывать X записей за раз). Это приведет к «маленьким» вызовам, поскольку пользователь будет запрашивать данные только по мере необходимости. Это действительно зависит от вашей ситуации. Нужно ли им просматривать все данные за один раз, или они будут видеть только небольшие куски за раз?

Просто запомните: маленькие кусочки = меньше ожидающих данных.

...