2009-04-01 6 views
7

En igualdad de condiciones, y en la forma más simple, ¿cuál es más rápido?
1.) Una llamada a un método de servicio Web
2.) Una llamada a una base de datos¿Cuál es la diferencia de velocidad entre las llamadas al servicio web y la base de datos?

Por ejemplo, suponga que tiene un servicio web simple que sólo devuelve un entero que se calcula en el tiempo X. También tiene una base de datos que, cuando se consulta de la manera correcta, también toma X veces para calcular la respuesta. (De modo que el tiempo de cálculo de es el mismo en ambos casos) En ambos casos, suponga que la cantidad de datos en ambas direcciones es la misma, por ejemplo, un entero de 32 bits, para simplificar.

Hasta ahora, los tiempos de cálculo tanto del servicio web como de la base de datos son exactamente los mismos.

El entorno es 1 servidor de aplicaciones, donde reside la aplicación, y 1 otro servidor que contiene tanto el servicio web como la base de datos. No hay nada más en el entorno que no sea la aplicación que llama repetidamente al servicio web o a la base de datos. Todo esto dentro de una única LAN, por lo que cualquier latencia de red es igual.

¿Desde una aplicación, que será más rápida, la llamada a la base de datos o la llamada al servicio web?

Lo que intento aislar, supongo, es cuál es más pesado. La configuración, apertura, cierre y cierre de una conexión de base de datos, ¿es más lenta que la de un servicio web o es la misma? Además, si hay otras cosas, como analizar el resultado de un servicio web, ¿cómo afectan la velocidad?

+1

Son dos problemas diferentes. Nadie inteligente usará una base de datos para realizar operaciones matemáticas. Entonces, en última instancia, su servicio web llegará a una base de datos, y por lo tanto será más lento que acceder directamente a una base de datos ... hasta que considere la posibilidad de almacenar en caché los resultados, y luego depende de URK – kdgregory

+0

@kdgregory. Puede haber leído mal su pregunta, pero no creo totalmente que sean dos problemas diferentes; por ejemplo, ahora mismo tengo que buscar la zona horaria para un usuario y puedo obtenerla de la base de datos (en una consulta simple de una tabla) o obtenerla de un servicio web, pero Estoy pensando que Herbert-Sitz tiene razón en cuanto a que la base de datos es más rápida porque en mi caso la llamada al servicio web implica más sobrecarga tanto en JBoss como en el servidor .Net que llamó al – JGlass

Respuesta

6

O (1) no hace referencia a ningún período de tiempo. Una sola operación podría tomar .001 ms en un servicio web y 100 segundos en una base de datos y ambos podrían estar usando O (1) funciones: http://en.wikipedia.org/wiki/Big_O_notation

Es difícil saber exactamente lo que estás preguntando. Si está preguntando si acceder a una base de datos local generalmente es más rápido que acceder a un servicio similar a través de Internet, entonces espero que, en general, la respuesta sea que la base de datos local será más rápida. La llamada a través del internet al servicio web tiene muchos gastos generales y la comunicación a través de Internet es relativamente lenta. Evan en una computadora lenta, las bases de datos pueden realizar miles de consultas simples por segundo. Contraste eso con el acceso a través de Internet, donde sería afortunado obtener 50 solicitudes de ida y vuelta por segundo, sin siquiera tener en cuenta el tiempo que lleva realizar la operación solicitada en el servidor.

Si está preguntando si un servidor en la web puede servir datos más rápidamente al evitar una base de datos y calcular los resultados directamente, entonces la respuesta es que depende. La llamada a la base de datos en este caso agrega una sobrecarga innecesaria si los datos que contiene se pueden calcular fácilmente en una función independiente. La respuesta a esta pregunta realmente no tiene nada que ver con un "servicio web". ¿Es más rápido calcular una respuesta en una función o acceder a la respuesta usando una consulta en una base de datos? Como dije, la respuesta dependería de la complejidad de la función particular que tenía que usar, y ponderar su tiempo de cálculo con la sobrecarga de acceder a la respuesta (o parte de la respuesta) directamente desde una base de datos.

En resumen, la respuesta a su pregunta depende de qué es exactamente lo que está preguntando. Probablemente también te ayude saber por qué estás haciendo la pregunta. Tengo la sospecha de que la verdadera respuesta es que esto probablemente no es algo de lo que deba preocuparse, realmente no es una preocupación práctica a menos que tenga una situación particular que requiera optimización.

Si le preocupa la comparación de la velocidad cuando el servicio web y la base de datos están en una LAN, estoy bastante seguro de que la sobrecarga de la base de datos es menor que el servicio web. Por lo general, la aplicación mantiene una (s) conexión (es) con estado a la base de datos, mientras que las solicitudes a un servicio web se realizan a través de http, que es sin estado, una sobrecarga relativamente mayor y más lenta. Sin embargo, podría estar equivocado. La mejor respuesta sería impulsar un servicio web simple, realizar consultas y (1) medir el tiempo que lleva recuperar resultados usando ambos métodos, y comparar, y/o (2) crear una aplicación que abra muchos hilos y cargue algo pruebas.

Advertencia: si su aplicación no mantiene una conexión abierta o tiene acceso a un grupo de conexiones con la base de datos, entonces la alternativa db puede ser más lenta. La creación inicial de una conexión db puede ser relativamente lenta. Pero eso no debe figurar en las cosas, ya que debe escribir su aplicación para que siempre se mantenga una conexión abierta.

+0

hermosa respuesta :) –

0

Si asumimos que se está comunicando con un servidor diferente para la web y las llamadas a la base de datos, ¿no serían prácticamente iguales, ya que ambas solicitudes se transfieren a través de TCP/IP? Entonces, lo único que se podría comparar es qué tan grandes son los resultados reales que se envían en términos de bits a través del cable.

2

Todo depende de la topología de red y los idiomas que está utilizando. Si estás hablando C# ... mi dinero estaría en la base de datos llamando más rápido casi todo el tiempo.

Sus llamadas al servidor de base de datos se realizarán a través del protocolo nativo. Todo va a ser optimizado.

Si está llamando a un servicio web, necesitará algún mecanismo para enviar la solicitud al servidor web, esperar que el servidor web responda, y luego algo para analizar el resultado de la llamada al servicio web de vuelta a tu código.

2

Se podría decir que, en general, la latencia de la red en un servicio web (que generalmente será a través de Internet) va a ser más lenta que la llamada a una base de datos (que normalmente está en una LAN o algo así más rápido que la conexión de uno a internet).

Por supuesto, esto hace MUCHAS suposiciones sobre configuraciones/software/etc, etc. que efectivamente lo reduce a una comparación de manzanas y naranjas, que nunca es una buena respuesta.

+0

Ajusté la pregunta un poco para restringir todo dentro una sola red. ¿Eso hace que la comparación sea más posible? – cdeszaq

+0

@cdeszaq: No, y a medida que agregas condiciones más específicas, solo muestra cómo son las manzanas y las naranjas, ya que lo que propones nunca existirá realmente. – casperOne

3

Basado en la experiencia práctica, diría que la llamada a la base de datos es significativamente más rápida.

1

La complejidad algorítmica es solo una variable que afecta el rendimiento general de un sistema. Otros factores pueden incluir la latencia de la red o el ancho de banda de la red, especialmente cuando el tamaño de los datos devueltos es diferente.

Si ejecuta el mismo algoritmo O (1) en una máquina local, obtendrá los resultados más rápido que si ejecuta el algoritmo en una máquina en otro continente y necesita los mismos resultados enviados a través de la red.

Otros factores pueden incluir la velocidad bruta de la CPU si las llamadas se realizan en máquinas físicamente diferentes.

Es por eso que la optimización prematura es la raíz de todo mal.

EDIT:

yo diría que depende aún más ahora en los detalles del sistema, es decir, lo que el software de base de datos que está utilizando los datos, o si o no el servicio web está leyendo una página web estática o generando dinámicamente los datos.

Pero estoy empezando a perder de vista por qué hace la pregunta. Pareces decir que ambos métodos toman la misma cantidad de tiempo. Entonces, si toman la misma cantidad de tiempo, ¿cómo pueden preguntar cuál es más rápido? Claramente, son igualmente rápidos. Necesita decirnos más sobre cómo y cuándo dejan de tomar la misma cantidad de tiempo.

1

O (1) no especifica la velocidad, especifica el "crecimiento" en el tiempo requerido a medida que los datos subyacentes se hacen más grandes. Las constantes se eliminan de la ecuación. Lo que esto significa es que O (N^2) puede ser menor que O (N) para algunos realmente pequeños N.

Un servicio web es una forma de conectarse a alguna funcionalidad. Además de la latencia de la red, el tiempo real está vinculado por lo que realmente está haciendo el servicio. Podría haber una base de datos debajo, por ejemplo. Si es algo que simplemente devuelve un Entero, el tiempo computacional es en su mayoría trivial, la solicitud está limitada por la red.

Una base de datos necesita analizar la consulta, crear un árbol de consultas, optimizarlo, luego aplicar algunos algoritmos de búsqueda contra una serie de cachés y archivos. Si simplemente se colocó un entero en una tabla trivial, o una llamada SQL sin tablas, entonces recuperar los datos es probablemente trivial, es todo el paquete transaccional que consumirá CPU.

¿Se puede obtener un paquete de ida y vuelta en un servidor antes de poder analizar un SQL trivial y devolver un resultado presentado? En su mayoría, en estos días, digo que fue un lanzamiento. Algunas redes son más rápidas que otras, mientras que algunas bases de datos y servidores son bastante buenos. Nada es seguro.

En general, ¿un servicio web es más rápido que una base de datos? Sí, si y solo si el servicio es trivial (si está ocultando una base de datos, entonces obviamente es tiempo adicional). Las bases de datos son motores voluminosos y, aunque se han vuelto mucho más rápidos a lo largo de los años, su nivel básico de integridad transaccional especifica una cantidad enorme de uso mínimo de CPU. Son más lentos porque están haciendo mucho más trabajo. Contraste eso con un cálculo mínimo explícito escondido detrás del acceso a la red. Una red de fibra o gigabit puede mover datos rápidamente. Es mucho menos trabajo lograr.

Por supuesto, la razón por la que no reemplazamos las bases de datos con servicios web escritos personalizados es el momento. Lleva mucho tiempo escribirlo y luego mantenerlo actualizado. Mucho más esfuerzo que simplemente ingresarlo a una base de datos y aceptar su desempeño.

Paul.

1

En mi humilde opinión, yo diría que la llamada a la base de datos sería más rápida. Digo esto porque hay mucho menos sobrecarga. Con la verbosidad del protocolo HTTP y el marcado SOAP en el que incurre, tiene mucha más carga en sus datos. Estos datos de hinchazón tienen un costo adicional para el embalaje y el desempaquetado. con una llamada a un procedimiento almacenado, puede usar un parámetro de salida para devolver un único int en lugar de un conjunto de resultados para hacerlo aún más claro.

Cuestiones relacionadas