2010-08-09 2 views
1

Есть ли веская причина предложить «обновление пакетного обновления» методов обновления в веб-службе .NET?Обновление массового обслуживания веб-сервисов

Есть ли значительное преимущество перед выполнением нескольких вызовов, асинхронных или синхронных, по HTTP?

Мой первый импульс заключается в том, чтобы предлагать асинхронные вызовы и включать идентификатор записи во входной композит, а также для возврата к требованию предложить пакетную работу в качестве микро-оптимизации. В качестве альтернативы я бы попросил потребителя использовать итеративный цикл и сделать несколько вызовов.

Я не хочу делать плохое предложение.

ответ

1

Мы предлагаем createRecord() и createRecordAsync()/createRecordCompleted (обработчик события)

Мы носились с идеей создания createRecordBatch() в течение примерно 10 секунд, прежде чем мы начали замечать проблемы с ним. Наш метод createRecord() включает, среди прочего, идентификатор сеанса, creatorHandle для пользователя и строковый массив, содержащий все значения. Чтобы реализовать пакетную загрузку, нам нужно было бы создать двумерный массив для значений, массив для хранения creatorHandle и один идентификатор сеанса.

Несмотря на это, наши веб-сервисы просто действуют как клин между нашими внешними поставщиками и нашим основным приложением. Основное приложение не поддерживает пакетные нагрузки. По сути дела, что мы бы делали, это подражание пакетной нагрузке нашим поставщикам. Нам пришлось бы анализировать их пакетные данные в отдельные записи. Не было никакого смысла предлагать макетным функциям нашим пользователям, которых не было, потому что мы не будем уменьшать количество просмотров в базе данных. Фактически, дополнительная работа по обработке пакетных нагрузок снимала работу с клиентской стороны и помещала ее на стороне разъема, что казалось противоречивым.

Было бы разумнее, если бы наши поставщики построили логику для создания нескольких билетов, собрав данные и сделав несколько индивидуальных вызовов нашим методам веб-службы. Я считаю, что только один из них делает асинхронные вызовы ... остальные довольны синхронным.

+1

Я не думаю, что было бы больно иметь createRecordBatch, потому что в какой-то момент ваша база данных может ее поддерживать, и вы уже предоставили интерфейс клиентам, таким образом, вы можете просто настроить реализацию вашего createRecordBatch с помощью «для "для использования синтаксиса основной вставки базы данных. – Nate

+0

@Nate Bross Я вижу вашу точку зрения, но я думаю, что я четко придерживаюсь позиции теперь, когда требование, подобное этому, должно существовать только в том случае, если в тестировании не выполняются цели производительности. – Sprague

+0

@Nate Bross. Вы делаете очень хороший момент ... Мне пришлось возьмите 10 минут, чтобы попытаться вспомнить, почему мы решили этот вариант (очень хороший). Не было никакой гарантии, что способ, которым мы разработали метод (ы) (параметры, типы данных), был бы согласован с основной реализацией. Мы были промежуточным программным обеспечением, а основная система - черным ящиком для нас. – RavB

1

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

+0

Я думал об этом, да, хотя запись обновления в одно утверждение слишком сложна для этого приложения. Я также думал, что их проблема заключалась в передаче дополнительных заголовков XML, но если они действительно отправляют столько данных, они также должны будут работать с буферами сообщений и т. Д. В WCF. Ваш ответ склоняет меня дальше, чтобы вернуть это требование пользователю в качестве преждевременной оптимизации. – Sprague