Каково Различие в скорости Между Вызовами веб-сервиса и Базой данных?

Я думаю, что проблема в том, что у вас есть метод return в вашем методе get_or_new(), который не возвращает кортеж:

if username == other_username:
    return None

Это приводит к тому, что представление падает, потому что оно ожидает распаковать кортеж на две переменные. Возврат кортежа должен разрешить:

if username == other_username:
    return None, None
8
задан cdeszaq 1 April 2009 в 18:19
поделиться

8 ответов

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

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

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

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

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

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

7
ответ дан 5 December 2019 в 10:05
поделиться

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

3
ответ дан 5 December 2019 в 10:05
поделиться

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

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

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

2
ответ дан 5 December 2019 в 10:05
поделиться

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

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

2
ответ дан 5 December 2019 в 10:05
поделиться

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

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

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

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

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

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

Paul.

1
ответ дан 5 December 2019 в 10:05
поделиться

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

1
ответ дан 5 December 2019 в 10:05
поделиться

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

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

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

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

Править:

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

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

1
ответ дан 5 December 2019 в 10:05
поделиться

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

0
ответ дан 5 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: