¿En qué manera la desnormalización mejorar el rendimiento de base de datos?

He oído mucho acerca de la desnormalización que se hizo para mejorar el rendimiento de ciertas aplicaciones. Pero yo nunca he probado a hacer nada relacionado.

Así, tengo curiosidad, a qué lugares normalizado en DB hace que el rendimiento peor, o en otras palabras, ¿qué son los principios de la desnormalización?

¿Cómo puedo usar esta técnica si me necesitan para mejorar el rendimiento?

  • Si no has probado la desnormalización entonces supongo que no has probado la normalización de cualquiera de los dos? Si es así, las respuestas a continuación puede ayudar a proporcionar un contexto basado en que…
  • Todas las bases de datos que he desarrollado (el más grande tenía 22 tablas) fueron en 3NF. Pero si te refieres al proceso clásico con la escritura de todas las propiedades y la creación de 1NF con mayor normalización, tienes razón, nunca he sentido la necesidad de hacerlo.
  • Denormalize por dos razones y en diferentes formas: 1. La historia real de los datos. 2. Velocidad (menor une) – campos calculados/índices. Las respuestas a continuación difumina estos dos enfoques diferentes.
InformationsquelleAutor Roman | 2010-02-27

8 Kommentare

  1. 70

    De la desnormalización es un espacio-tiempo trade-off. Los datos normalizados ocupa menos espacio, pero puede requerir que se unen para construir el conjunto resultado deseado, por lo tanto, más tiempo. Si no normalizada, los datos se replican en varios lugares. A continuación, toma más espacio, pero la vista deseada de los datos es fácilmente disponible.

    Hay otro espacio-tiempo optimizaciones, como

    • sin normalizar ver
    • precalculadas columnas

    Como con cualquier de tal enfoque, esta mejora la lectura de los datos (porque son fácilmente disponibles), pero la actualización de los datos de se vuelve más costoso (debido a que usted necesita para actualizar la replica o precalculadas de datos).

    • Es también una actualización de la anomalía en cuestión. Debidamente normalizado en DB puede actualizar sin cosas extrañas ocurriendo. Una base de datos sin normalizar se ha duplicado de datos; una actualización de una copia se tendrá anomalías.
    • Verdadero. El OP solo pide para él bajo una perspectiva de rendimiento. Yo no cubren desde el punto de vista del modelo relacional.
    • Por CIERTO, debo decir que el tiempo-espacio de trade-off, en lugar de la prestación de espacio.
    • La desnormalización nunca debe hacerse sin proporcionar una manera para que las actualizaciones automáticas de los cambios en los datos sin normalizar. Por lo que si va a almacenar el nombre de usuario en dos lugares, usted necesita un disparadores para asegurarse de que mantenerse en sincronía. Esto evitará que el problema que S. Lott se habla y es el paso de la mayoría de la gente se olvide de hacer.
    • Alternativamente, es una manera de mantener a los datos históricos, que usted puede ser que desee hacer en un almacén de datos. Solo tengo una dirección de casa, pero alguien que vende a mí posible que desee seguir la pista de donde cada individuo de la orden enviada lugar de donde otra sería la nave.
    • DAvid, que no es realmente la desnormalización, que la intención de diseño. Los pedidos no debe cambiar si el cliente de los cambios de nombre o de la dirección de los cambios o de los precios de las piezas pedidas cambios. Los Pedidos de los registros de la tabla de un momento de tiempo.

  2. 84

    De la desnormalización se utiliza generalmente para:

    • Evitar un cierto número de consultas
    • Quitar algunos une

    La idea básica de la desnormalización es que usted va a agregar datos redundantes, de grupo o de algunos, para ser capaz de obtener los datos más fácilmente-en un menor costo; que es mejor para las actuaciones.


    Un rápido ejemplo?

    • Considerar un «mensajes» y un «Comentario» de la tabla, para un blog
      • Para cada Post, tendrás varias líneas en el «Comentario» de la tabla de
      • Esto significa que para mostrar una lista de los puestos asociada con el número de comentarios, usted tendrá que:
        • Hacer una consulta a la lista de los puestos de
        • Hacer una consulta por post para contar la cantidad de comentarios que ha (Sí, aquellos que se pueden combinar en uno solo, para obtener el número de todos los mensajes a la vez)
        • Que significa varias consultas.
    • Ahora, si se agrega un «número de comentarios» en las entradas de la tabla:
      • Sólo se necesita una consulta a la lista de los puestos de
      • Y no hay necesidad de consultar los Comentarios de la tabla: el número de comentarios que ya están desnormalizados a los Puestos de la tabla.
      • Y sólo una consulta que devuelve un campo más es mejor que más consultas.

    Ahora, hay algunos costos, sí:

    • En primer lugar, este de los costos de algún lugar en el disco y en la memoria, cuando tenga un poco redundante de la información:
      • El número de comentarios se almacenan en los Puestos de la tabla de
      • Y usted también puede encontrar estos números contando con los Comentarios de la tabla
    • Segundo, cada vez que alguien añade/elimina un comentario, usted tiene que:
      • Guardar/borrar el comentario, por supuesto
      • Pero también, la actualización de la correspondiente en el número de Puestos de la tabla.
      • Pero, si tu blog tiene mucha más gente de la lectura de la escritura de comentarios, esto probablemente no es tan malo.
    • gran ejemplo, la mayoría de las personas sólo piensan en «unirse» un par de tablas.
    • +1 Este es uno de los mejores ejemplos que he encontrado para el De-Normalización, gracias mucho por ella, ojalá pudiera hacer +10 para ti
    • Este es un muy buen ejemplo de un aceptable caso para el uso de la desnormalización y sentido para el rendimiento. Por lo general soy muy opuesto a eliminar la normalización de los datos, pero hay momentos en que se debe hacer para el rendimiento.
    • Pensé que esto era una buena idea, hasta que dos usuarios de los comentarios publicados en el mismo tiempo y el resultado fue de +1 comentario en el post porque ambos hilos leer el valor antiguo y el método de actualización utilizado era ingenuo en lugar de pasar el incremento a la consulta. la desnormalización también disminuye la capacidad de mantenimiento y no debe ser olvidado, como un costo. Prematuro de la optimización de… ya sabes cómo va. La combinación en el índice funciona muy bien, y cuando se convierte en un problema, entonces y sólo entonces nos denormalize.
  3. 11

    La palabra «eliminar la normalización» conduce a la confusión de los problemas de diseño. Tratando de conseguir un alto rendimiento de la base de datos de eliminar la normalización es como tratando de llegar a su destino por la conducción de distancia de Nueva York. No nos dice en qué dirección ir.

    Lo que usted necesita es una buena disciplina de diseño, uno que produce una simple y el diseño de sonido, incluso si el diseño a veces en conflicto con las normas de la normalización.

    Un diseño de este tipo de disciplina es el esquema en estrella. En un esquema en estrella, una sola tabla de hechos sirve como el centro de una estrella de tablas. Las otras tablas se denominan tablas de dimensiones, y están al borde del esquema. Las dimensiones están conectados a la tabla de hechos a través de las relaciones que se ven como los radios de una rueda. Esquema en estrella es básicamente una manera de proyectar el diseño multidimensional en una implementación de SQL.

    Estrechamente relacionado con el esquema en estrella es el esquema de copo de nieve, que es un poco más complicado.

    Si usted tiene un buen esquema en estrella, usted será capaz de obtener una gran variedad de combinaciones de sus datos con no más de tres unirse, lo que implica dos dimensiones y la tabla de hechos. No sólo eso, sino que muchos OLAP herramientas será capaz de descifrar su diseño de estrella automáticamente, y dará punto-y-clic, perforar hacia abajo, y el análisis de las gráficas de acceso a sus datos con ninguna programación adicional.

    Diseño de esquema en estrella ocasionalmente se viola la segunda y tercera formas normales, sino que se traduce en más velocidad y flexibilidad para los informes y extractos. Es más a menudo utilizado en almacenes de datos, data marts, y bases de datos de informes. Por lo general, tienen mucho mejores resultados de esquema en estrella o algún otro recuperación de un diseño orientado, de tan sólo el azar «desnormalización».

  4. 7

    Los temas críticos en eliminar la normalización son:

    • Decidir qué datos duplicados y por qué
    • La planificación de cómo mantener los datos sincronizados
    • Refactorización las consultas a utilizar el sin normalizar los campos.

    Uno de los más fáciles tipos de eliminar la normalización es para rellenar un campo de identidad de las tablas para evitar una combinación. Como las identidades no debe cambiar nunca, esto significa que el tema de mantener sincronizados los datos rara vez sube. Por ejemplo, nos pueblan nuestro id de cliente para varias mesas, ya que a menudo necesitan consultar a ellos por el cliente y no necesariamente necesitan, en las consultas, cualquiera de los datos en las tablas que sería entre el cliente de la tabla y la tabla que estamos consultando si los datos fue totalmente normalizada. Usted todavía tiene que hacer una combinación para obtener el nombre del cliente, pero que es mejor que unirse a la 6 de padres de tablas para obtener el nombre del cliente al que es la única pieza de datos que necesita desde fuera de la tabla que está consultando.

    Sin embargo, no sería de ningún beneficio a menos que se suelen hacer consultas en donde los datos de la intervención de las tablas que se necesitaba.

    Otro comunes de la desnormalización podría ser añadir un campo de nombre a otras mesas. Como los nombres son intrínsecamente cambiante, usted necesita para asegurarse de que los nombres de permanecer en sintonía con los factores desencadenantes. Pero si esto le ahorra unirse a 5 tablas en lugar de 2, puede ser vale la pena el costo de los poco más de inserción o actualización.

  5. 3

    Si usted tiene ciertas requisito, como la presentación de informes, etc., puede ayudar a denormalize su base de datos de varias formas:

    • introducir cierta duplicación de datos para ahorrar un poco de Combinaciones (por ejemplo, llenar cierta información en una tabla y estar bien con los duplicados de los datos, de modo que todos los datos de esa tabla y no necesita ser encontrado por unirse a otra mesa)

    • usted puede pre-calcular ciertos valores y almacenarlos en una columna de la tabla, insteda de informática de ellos sobre la marcha, cada vez a una consulta de la base de datos. Por supuesto, los valores calculados podría obtener «obsoletos» a lo largo del tiempo y puede que necesite volver a calcular en algún momento, pero sólo la lectura de un valor fijo es generalmente más barato que la informática algo (por ejemplo, recuento de filas de hijos)

    Sin duda hay más formas de denormalize un esquema de base de datos para mejorar el rendimiento, pero tienes que ser consciente de que usted consiga a ti mismo en un cierto grado de dificultad para hacerlo. Usted tiene que sopesar cuidadosamente los pros y los contras – los beneficios en el rendimiento frente a los problemas que te metes en cuando tomar esas decisiones.

    • Pre-cumputed valores no quedarme estancado si se diseña adecuadamente a mantenerlos actualizados. O si usted elige para actualizar periódicamente los usuarios necesitan saber que los valores son un día de edad (o lo que sea la actualización del plazo).
    • que es lo que quiero decir – ya sea que usted necesita para actualizar automáticamente según sea necesario (cuando los datos subyacentes de los cambios), o los de sus usuarios deben ser conscientes de que podrían ser un poco fuera de sincronización (por ejemplo, hasta que se vuelve a calcular durante la noche, o algo así).
  6. 1

    Considerar una base de datos correctamente con un normalizado de la relación padre-hijo.

    Digamos que la cardinalidad es de un promedio de 2×1.

    Tiene dos tablas, de los Padres, con p filas. Niño con 2x p filas.

    La operación de combinación de medios para p filas madre, 2x p niño filas debe ser leído. El número total de filas que se puede leer es p + 2x p.

    Considerar la posibilidad de eliminar la normalización de esto en una sola tabla con sólo el niño filas, 2x p. El número de filas que se puede leer es 2x p.

    Menos filas == menos de e/S físicas == más rápido.

    • Yo no creo que esto sea del todo cierto….debido a los índices de almacén de columnas…pero es sólo mi opinión
  7. 0

    Según la última sección de este artículo,

    https://technet.microsoft.com/en-us/library/aa224786%28v=sql.80%29.aspx

    uno podría usar Virtual de la Desnormalización, donde puede crear Vistas con algunos datos sin normalizar para la ejecución de más simplista de consultas SQL más rápido, mientras que las Tablas subyacentes siguen siendo normalizado para la más rápida de añadir/actualizar las operaciones (tanto tiempo como usted puede conseguir lejos con la actualización de las Vistas a intervalos regulares, en lugar de en tiempo real). Me estoy tomando una clase sobre Bases de datos Relacionales a mí mismo, pero, a partir de lo que he estado leyendo, este enfoque me parece lógica.

  8. -6

    Beneficios de la normalización sobre la normalización

    Básicamente de la normalización se utiliza para el DBMS no para el RDBMS. Como sabemos que los RDBMS funciona con la normalización, lo que significa que no repita los datos de nuevo y de nuevo. Pero todavía repetir algunas de datos cuando se utiliza la clave externa.

    Cuando se utiliza DBMS, a continuación, es necesario quitar la normalización. Para ello, existe una necesidad de repetición. Pero aún así, se mejora el rendimiento porque no hay ninguna relación entre las mesas y en cada mesa tiene indivisible existencia.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...