7

¿Cuáles son las mejores prácticas para el diseño de bases de datos y la normalización para sitios web de alto tráfico como stackoverflow?Normalizar o desnormalizar en sitios web de alto tráfico

¿Debería uno utilizar una base de datos normalizada para el mantenimiento de registros o una técnica normalizada o una combinación de ambos?

¿Es sensato diseñar una base de datos normalizada como la base de datos principal para el mantenimiento de registros para reducir la redundancia y al mismo tiempo mantener otra forma de base de datos desnormalizada para una búsqueda rápida?

o

caso de que la base de datos principal se desnormalizado pero con vistas normalizadas a nivel de aplicación para las operaciones de base de datos rápida?

o algún otro enfoque?

Respuesta

5

La desnormalización de la base de datos para reducir el número de combinaciones necesarias para consultas intensas es una de las muchas formas diferentes de escalar. Tener que hacer menos combinaciones significa menos trabajo pesado por parte del DB, y el disco es barato.

Dicho esto, para cantidades ridículas de tráfico, puede ser difícil lograr un buen desempeño relacional en dB. Es por eso que muchos sitios más grandes usan almacenes de valores clave (por ejemplo, memcached) y otros mecanismos de almacenamiento en caché.

The Art of Capacity Planning es bastante bueno.

+4

espacio en disco es barato, pero el rendimiento del disco duda no lo es. Con un diseño desnormalizado, a menudo termina insertando o actualizando un mayor volumen de datos en tablas más amplias, y eso a menudo causa problemas de rendimiento. –

+1

Es cierto que hay compensaciones con cada decisión. Lo que realmente funciona depende de la estructura de sus datos. – BaroqueBobcat

1

Primero: definir por sí mismo lo que significa hight-tráfico:

  • 50,000 Página-Viewss por día?
  • 500.000 páginas vistas por día?
  • 5.000.000 de páginas vistas por día?
  • más?

Después de calcular esto a pobalbe vistas de página pico por minuto y por segundos. Después de eso, piense en los datos que desea consultar por página vista. ¿Los datos son cacheables? ¿Qué tan dinámico es la información, qué tan grande es la información?

Analice sus requisitos individuales, programe algún código, realice algunas pruebas de carga, optimice. En la mayoría de los casos, antes de que necesite escalar los servidores de base de datos, necesita escalar los servidores web.

¡La base de datos relacional puede ser, si se optimiza completamente, increíblemente rápida, al unir mesas!

Una base de datos relacional podría ser golpeada raramente cuando como un back-end, para poblar un caché o rellenar algunas tablas de datos desnormalizadas. No convertiría la denomralización en el enfoque predeterminado.

(Usted mencionó búsqueda, por ejemplo, buscar en Lucene o algo similar, si necesita búsqueda de texto completo.)

La mejor respuesta mejores prácticas es, sin duda: Depende ;-)

0

Para un proyecto en el que estoy trabajando, hemos optado por la ruta de tabla desnormalizada ya que esperamos que nuestras tablas principales tengan una alta proporción de escrituras a lecturas (en lugar de que todos los usuarios utilicen las mismas tablas, las hemos desnormalizado) y establecer cada "conjunto de usuarios" para usar un fragmento en particular).Puede encontrar read http://highscalability.com/ para ver ejemplos de cómo los "grandes sitios" hacen frente al volumen - Stack Overflow que se presentó recientemente.

10

El rendimiento de la unión se sobrestima con frecuencia. Los productos de base de datos como Oracle están diseñados para unirse de manera muy eficiente. A menudo se considera que las uniones funcionan mal cuando el verdadero culpable es un modelo de datos deficiente o una estrategia de indexación deficiente. La gente también olvida que las bases de datos desnormalizadas tienen un rendimiento muy malo cuando se trata de insertar o actualizar datos.

La clave a tener en cuenta es el tipo de aplicación que está creando. La mayoría de los sitios web famosos no son como las aplicaciones empresariales normales. Es por eso que Google, Facebook, etc. no usan bases de datos relacionales. Ha habido mucha discusión sobre este tema recientemente, que I have blogged about.

Así que si está creando un sitio web que se trata principalmente de entregar shedes de contenido semiestructurado, probablemente no desee utilizar una base de datos relacional, denormalizada o de otro modo. Pero si está creando un sitio web altamente transaccional (como un banco en línea), necesita un diseño que garantice la seguridad e integridad de los datos, y lo hace muy bien. Eso significa una base de datos relacional en al menos una tercera forma normal.

0

No importa si no está almacenando en caché correctamente.

Cuestiones relacionadas