¿Cómo se descargan los trabajos desde la base de datos?

7

Al menos en el campo de desarrollo web, los servidores web están en todas partes pero están respaldados por muy pocos servidores de bases de datos. A medida que los servidores web reciben solicitudes, ejecutan grandes consultas en la base de datos, lo que pone al servidor bajo una gran carga. Si bien los servidores web son muy fáciles de escalar, los servidores db son mucho más difíciles (al menos por lo que sé), lo que los convierte en un recurso precioso.

Una forma que he escuchado de algunas respuestas aquí para quitar la carga de la base de datos es descargar el trabajo al servidor web. Fácil, hasta que te des cuenta de que ahora tienes un montón de tráfico interno como el servidor web intenta ejecutar SELECT TOP 3000 (presumiblemente para procesar los resultados por sí solo), lo que aún ralentiza las cosas.

¿Cuáles son otras formas de quitar la carga de la base de datos?

    
pregunta TheLQ 20.03.2011 - 17:57

5 respuestas

10

Aquí hay una lista de opciones estándar.

  1. Optimice el acceso a la base de datos para hacer solo lo que necesita, de manera eficiente. Un buen DBA puede ayudar mucho aquí. Este es un paso básico que la mayoría de las empresas realizan.

  2. Almacena en caché los datos de la base de datos usando algo como memcached. Esto generalmente se realiza en la capa de aplicación y es altamente efectivo. Prácticamente todos los sitios web competentes deberían hacer esto.

  3. Más ambiciosamente, mantenga copias de solo lectura de la base de datos y dirija las consultas allí cuando sea posible. En el lado de la base de datos, la tecnología necesaria se denomina "replicación" y las copias de solo lectura también suelen ser copias de seguridad para la conmutación por error desde la base de datos principal. Si estás haciendo un millón de páginas dinámicas por hora, es probable que estés haciendo esto o que hayas pensado en ello.

  4. Compre hardware realmente caro para la base de datos. Sé que PayPal hizo esto desde hace 4 años, y cambiar su arquitectura hubiera sido difícil, así que posiblemente todavía lo sean.

  5. Divida la base de datos en varias partes con rangos de datos. Este es un cambio muy intrusivo en el diseño de la aplicación. Un ejemplo conocido de una empresa que hace esto es eBay.

  6. Intente usar una base de datos que se adapte a varias máquinas. RAC de Oracle se escala en clústeres, pero no le permite distribuir los datos en forma amplia. Existen otras ofertas que se supone que son más fáciles de distribuir, como SQL Azure de Microsoft y FathomDB . No he usado esas ofertas y no sé qué tan bien funcionan. Sospecho que es mejor que nada, pero dudo que se amplíen tan bien horizontalmente.

  7. Las bases de datos relacionales generalmente intentan proporcionar ACID . Pero el teorema CAP hace que sea muy difícil hacerlo en un sistema distribuido, particularmente mientras te permite hacer cosas como unir datos. Por lo tanto, las personas han creado muchas Alternativas NoSQL que ofrecen explícitamente garantías más débiles y evitan operaciones problemáticas a cambio de una escalabilidad totalmente distribuida. Ejemplos conocidos de empresas que utilizan almacenes de datos NoSQL escalables incluyen Google, Facebook y Twitter.

respondido por el btilly 21.03.2011 - 03:47
6

El 90% del problema es optimizar las consultas de la base de datos y configurar su servidor correctamente. Asegúrese de tener los índices adecuados, de que las consultas no se realizan escaneos de filas, etc. Utilice las herramientas de perfilador que ofrece su base de datos. Usted se sorprenderá de lo mucho que esto puede afectar a un servidor. Muchas compañías se apresurarán y comprarán un nuevo servidor de base de datos cuando todo lo que realmente necesitan es un par de índices adicionales para reducir la carga.

Una vez que obtenga las consultas tan optimizadas como pueda y su servidor db aún esté sobrecargado, use replicación de base de datos para distribuir la carga de trabajo. En lugar de un único servidor de base de datos con exceso de trabajo, divídalo en 2 o más, con los otros replicando el maestro. Luego haga que las pesadas consultas de solo lectura (informes, etc.) funcionen contra las bases de datos replicadas, y solo acceda a la base de datos maestra para consultas simples e inserciones / actualizaciones.     

respondido por el GrandmasterB 20.03.2011 - 18:59
5
  

¿Cómo reduce la carga de trabajo de la base de datos?

  • Almacene en caché los datos en los servidores web para que la capa empresarial no realice llamadas redundantes a la base de datos. [Los marcos ORM como Hibernate pueden ayudar con esto.]
  

Fácil, hasta que te das cuenta de que ahora tienes un montón de tráfico interno, ya que un servidor web intenta ejecutar SELECT TOP 3000 (probablemente para procesar los resultados por sí solo), lo que aún ralentiza las cosas.

  • Programe trabajos que anticipen la necesidad de realizar cálculos y agregaciones pesados y almacene los resultados en el caché de la aplicación (accesible para todas las solicitudes).
respondido por el Jim G. 20.03.2011 - 18:41
2
  

Una forma que he escuchado de algunas respuestas aquí para quitar la carga de la base de datos es descargar el trabajo al servidor web. Fácil, hasta que te das cuenta de que ahora tienes una tonelada de tráfico interno cuando un servidor web intenta ejecutar SELECT TOP 3000 (probablemente para reducir los resultados por sí solo), lo que aún ralentiza las cosas.

Creo que podrías estar tomando esto un poco demasiado literalmente. No se trata de que los servidores web realicen el mismo cálculo que la base de datos. En la mayoría de las aplicaciones, existen oportunidades para almacenar en caché no solo el conjunto de resultados de la base de datos, sino también para almacenar en caché el resultado final del uso del conjunto de resultados (normalmente para generar algo de contenido en una página).

Como ejemplo, supongamos que tiene una lista de "publicaciones de blog más populares" en un blog que es relativamente costoso de consultar desde la base de datos. Sin almacenamiento en caché, si su blog repentinamente recibe una gran cantidad de tráfico intenso, su aplicación de blog consultará repetidamente la base de datos para generar la lista de "publicaciones más populares" para cada carga de página y fallará rápidamente bajo carga. Ahora digamos que solo almacena en la memoria caché esa lista de publicaciones populares durante 15 minutos. De esta manera, incluso si obtiene un millón de visitas en una hora, su base de datos ejecutará esa consulta solo cuatro veces.

Al hacer esto, está haciendo una compensación para que la lista de publicaciones más populares del blog esté obsoleta por hasta 15 minutos, pero está obteniendo una carga significativamente menor en la base de datos (y una mayor escalabilidad).

    
respondido por el Ken Liu 14.09.2011 - 02:55
0

Descargo de responsabilidad: no soy un experto en servidores web, consultas de bases de datos, etc. (no es mi campo) :)

Dicho esto, me encantó el concepto mostrado en esta presentación en Node.js.

( Artículo relacionado )

    
respondido por el Reno 20.03.2011 - 18:18

Lea otras preguntas en las etiquetas