Какова разница в скорости между вызовами базы данных и веб-службы? - PullRequest
7 голосов
/ 01 апреля 2009

При прочих равных условиях и в самой простой форме, что быстрее?
1.) вызов метода веб-службы
2.) Вызов в базу данных

Например, предположим, что у вас есть простой веб-сервис, который просто возвращает целое число, вычисленное в X раз. У вас также есть база данных, которая при правильном запросе также требует X времени для вычисления ответа. (Таким образом, время вычисления одинаково в обоих случаях ). В обоих случаях для простоты предположим, что объем данных в обоих направлениях одинаков, скажем, одно 32-разрядное целое число.

Пока что время расчета как веб-службы, так и базы данных одинаково.

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

Из приложения, которое будет быстрее, звонок в базу данных или звонок в веб-сервис?

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

Ответы [ 8 ]

6 голосов
/ 01 апреля 2009

O (1) не относится ни к какому отрезку времени. Одна операция может занять 0,001 мс в веб-сервисе и 100 секунд в базе данных, и они обе могут использовать функции O (1): http://en.wikipedia.org/wiki/Big_O_notation

Трудно понять, что вы спрашиваете. Если вы спрашиваете, является ли доступ к локальной базе данных, как правило, быстрее, чем доступ к аналогичной службе через Интернет, то я ожидаю, что, как правило, ответ заключается в том, что локальная база данных будет быстрее. При обращении через Интернет к веб-службе возникает много накладных расходов, а связь по Интернету относительно медленная. Эван на медленном компьютере базы данных может выполнять многие тысячи простых запросов в секунду. Сравните это с доступом через Интернет, где вам посчастливится получать 50 запросов туда-обратно в секунду, даже не считая времени, которое требуется для выполнения запрошенной операции на сервере.

Если вы спрашиваете, может ли сервер в Интернете обслуживать данные быстрее, избегая базы данных и вычисляя результаты напрямую, тогда ответ будет зависеть. В этом случае обращение к базе данных добавляет ненужные накладные расходы, если данные в ней можно легко рассчитать в отдельной функции. Ответ на этот вопрос не имеет никакого отношения к «веб-сервису». Это быстрее вычислить ответ в функции или получить доступ к ответу с помощью запроса в базе данных? Как я уже сказал, ответ будет зависеть от сложности конкретной функции, которую вы должны использовать, и от времени ее вычисления против затрат времени на получение ответа (или части ответа) непосредственно из базы данных.

Короче говоря, ответ на ваш вопрос зависит от того, что именно вы спрашиваете. Это также, вероятно, поможет узнать почему вы задаете вопрос. У меня есть подозрение, что реальный ответ заключается в том, что это, вероятно, не то, о чем вам нужно беспокоиться, а не практическая проблема, если у вас нет конкретной ситуации, требующей оптимизации.

Если вы обеспокоены сравнением скорости, когда веб-сервис и база данных находятся на локальной сети, я уверен, что издержки БД меньше, чем у веб-сервиса. Приложение обычно поддерживает подключение к базе данных с отслеживанием состояния, в то время как запросы к веб-сервису осуществляются через http, что является отсутствием состояния, относительно большими накладными расходами и медленнее. Может быть, неправильно, хотя. Лучшим ответом будет создание простого веб-сервиса, запрос и (1) измерение времени, необходимого для получения результатов с использованием обоих методов, и сравнение, и / или (2) создание приложения, которое открывает много потоков и выполняет некоторую загрузку. тестирование.

Предупреждение: если ваше приложение не поддерживает открытое соединение или не имеет доступа к пулу соединений с базой данных, альтернатива этой базе данных может оказаться медленнее. Первоначальное создание соединения БД может быть относительно медленным. Но это не должно влиять на вещи, так как вы должны написать свое приложение так, чтобы открытое соединение всегда поддерживалось.

3 голосов
/ 01 апреля 2009

Исходя из практического опыта, я бы сказал, что вызов базы данных значительно быстрее.

2 голосов
/ 01 апреля 2009

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

Конечно, это делает МНОГО допущений относительно настроек / программного обеспечения / и т. Д., И т. Д., Что фактически сводит их к сравнению яблок и апельсинов, на которые никогда не найдется хорошего ответа.

2 голосов
/ 01 апреля 2009

Все зависит от топологии сети и языков, которые вы используете. Если вы говорите на C # ... мои деньги были бы на вызове базы данных быстрее почти каждый раз.

Ваши звонки на сервер базы данных будут осуществляться по собственному протоколу. Все будет оптимизировано.

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

1 голос
/ 01 апреля 2009

ИМХО Я бы сказал, что вызов базы данных будет быстрее, чем просто. Я говорю это потому, что накладных расходов намного меньше. Благодаря многословности HTTP-протокола и разметки SOAP ваши данные будут намного больше. Эти данные не имеют дополнительной стоимости для упаковки и распаковки. при вызове хранимой процедуры вы можете использовать выходной параметр, чтобы вернуть один int вместо набора результатов, чтобы сделать его еще светлее.

1 голос
/ 01 апреля 2009

O (1) не определяет скорость, он указывает «рост» во времени, необходимом, поскольку базовые данные становятся больше. Константы отбрасываются из уравнения. Это означает, что O (N ^ 2) может быть меньше, чем O (N) для некоторого действительно малого N.

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

База данных должна проанализировать запрос, построить дерево запросов, оптимизировать его, а затем применить некоторые алгоритмы поиска к ряду кэшей и файлов. Если вы просто поместили Integer в тривиальную таблицу или в безбалансовый вызов SQL, то выборка данных, вероятно, тривиальна, это вся транзакционная упаковка, которая потребляет процессор.

Можете ли вы получить пакет назад и вперед на сервер, прежде чем сможете проанализировать тривиальный SQL и отбросить результат таблицы? В основном, в эти дни я говорю, что это был подъем. Некоторые сети работают быстрее, чем другие, в то время как некоторые базы данных и серверы довольно хороши. Нет уверенности.

В целом, веб-сервис быстрее, чем база данных? Да, если и только если служба тривиальна (если она скрывает базу данных, то, очевидно, это просто дополнительное время). Базы данных - это большие громоздкие движки, и, хотя с годами они стали намного быстрее, их базовый уровень целостности транзакций определяет очень много минимального использования ЦП. Они медленнее, потому что делают гораздо больше работы. Сравните это с некоторыми явными минимальными вычислениями, скрытыми за доступом к сети. Фибер или гигабитная сеть может быстро перемещать данные. Намного меньше работы, которую нужно выполнить.

Конечно, причина, по которой мы не заменяем базы данных пользовательскими письменными веб-сервисами, - время. Это занимает слишком много времени, чтобы написать его, а затем поддерживать его в актуальном состоянии. Намного больше усилий, чем просто вбить его в базу данных и признать его производительность.

Paul.

1 голос
/ 01 апреля 2009

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

Если вы запустите тот же алгоритм O (1) на локальной машине, вы получите результаты быстрее, чем если вы запустите алгоритм на машине на другом континенте и вам понадобятся те же результаты, отправленные по сети.

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

Вот почему преждевременная оптимизация - корень всего зла.

EDIT:

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

Но я начинаю терять из виду, почему вы задаете вопрос. Вы, кажется, говорите, что оба метода занимают одинаковое количество времени. Итак, если они занимают одинаковое количество времени, как вы можете спросить, что быстрее? Очевидно, они одинаково быстры. Вы должны рассказать нам больше о том, как и когда они перестают занимать одинаковое количество времени.

0 голосов
/ 01 апреля 2009

Если мы предполагаем, что вы общаетесь с другим сервером для вызовов как через Интернет, так и через базу данных, разве они не будут в значительной степени одинаковыми, поскольку оба запроса передаются через TCP / IP? Тогда единственное, что можно сравнить, это то, насколько велики фактические результаты, которые отправляются обратно в виде битов по проводам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...