Red de conocimiento informático - Material del sitio web - Principios de diseño de bases de datos grandes

Principios de diseño de bases de datos grandes

Un buen producto de base de datos no es igual a un buen sistema de aplicación. No diseñar un modelo de base de datos razonable no solo aumentará la dificultad de programación y mantenimiento de los programas cliente y servidor, sino que también afectará el rendimiento del sistema. En términos generales, durante las etapas de análisis, diseño, prueba y depuración de los sistemas de información de gestión, debido a la pequeña cantidad de datos, los diseñadores y evaluadores a menudo solo prestan atención a la implementación de funciones y es difícil notar las debilidades en el rendimiento. En términos generales, durante las etapas de análisis, diseño, prueba y depuración de los sistemas MIS, debido a la pequeña cantidad de datos, los diseñadores y evaluadores a menudo solo se centran en la implementación de funciones y es difícil notar puntos débiles en el rendimiento. El sistema se pone en funcionamiento Después de ejecutarlo durante un período de tiempo, se descubrió que el rendimiento del sistema estaba disminuyendo. En este momento, considerar que mejorar el rendimiento del sistema requeriría más mano de obra y recursos materiales, y todo el sistema inevitablemente. convertirse en un proyecto de mosaico.

Los diferentes productos de bases de datos tienen diferentes requisitos para la denominación de objetos. Por lo tanto, los nombres de varios objetos en la base de datos y el código del programa en segundo plano deben escribirse en un formato que distinga entre mayúsculas y minúsculas. La longitud del nombre de varios objetos no debe exceder un carácter para que el sistema de aplicación pueda adaptarse más fácilmente a diferentes bases de datos. (Los cursores proporcionan una forma de escanear un conjunto de datos específico fila por fila. En términos generales, los cursores se utilizan para recorrer los datos fila por fila y realizar diferentes operaciones según las diferentes condiciones de los datos recuperados. Especialmente cuando se definen varias tablas y tablas grandes en En este caso, el bucle del cursor (para conjuntos de datos grandes) puede hacer que el programa espere mucho tiempo o incluso falle. El autor utilizó una vez cursores en el "Sistema de gestión de fondos de previsión para la vivienda" de una ciudad para procesar el final del día. cálculos de número de reinversión de cuenta y millones de intereses de cuenta. Después del procesamiento, el programa esperaba indefinidamente (se calculó que tardaría una hora en completarse) (el entorno de hardware era Alpha/Mram Sco Unix Sybase), la declaración UPDATE con diferentes condiciones. podría completarse en 20 minutos

¿Para seleccionar? count_no de COUNT

Declarar cursor Mycursor

Abrir Mycursor

Poner Micursor en @vcount_no

Mientras (@@ sqlstatus= )

Mientras (@@), el número de count_no no es suficiente.@vcount_no= ?Condiciones

Operaciones

Si? @vcount_no= ?Condicional

Operación

Obtener micursor en @vcount_no

Fin

Cambiar a

Condicional

¿Actualizar COUNT set?COUNT set?Operación condicional

En algunas situaciones, a veces es necesario utilizar un cursor. En este caso, también puede considerar transferir las filas de datos que cumplen las condiciones a la tabla temporal y luego definir un cursor en la tabla temporal para realizar la operación. El rendimiento que se puede utilizar para mejorar el rendimiento es considerable. Una vez diseñada una tabla (1 Miles de filas de datos), hay muchas filas de datos que cumplen con las condiciones.

El autor realizó una operación de cursor en una tabla (múltiples filas de datos calificados entre 10,000 filas de datos) en el diseño del programa de fondo de la base de datos de una ciudad (sistema de facturación de telecomunicaciones) (entorno de hardware servidor de PC PII Mram NT Ms Sqlserver) El ejemplo es el siguiente sigue

Crear #tmp?/* Definir tabla temporal*/

(Campo

Campo

)

p>

Insertar en #tmp seleccionar * de TOTAL tmp seleccionar * de TOTAL donde

¿Condición?/* Hay 10,000 registros en TOTAL, solo se cumplen docenas de registros las condiciones*/

Declarar cursor Mycursor para seleccionar * de #tmp

/* Definir cursor para tabla temporal*/

Principio de indexación

Crea un cursor para #tmp.

Los índices generalmente se crean con dos propósitos: mantener la unicidad de las columnas del índice y acceder rápidamente a los datos de la tabla. Se permite que una tabla tenga un índice agrupado, por lo que de acuerdo con la estructura del árbol B, se puede entender que agregar cualquier tipo de índice puede mejorar la velocidad de consulta de la columna de índice, pero reducirá el rendimiento de insertar, actualizar y eliminar. operaciones, especialmente cuando el factor de llenado es grande por hora. Por lo tanto, cuando se realizan operaciones frecuentes de inserción, actualización y eliminación en una tabla con una gran cantidad de índices, el factor de relleno de la tabla y el índice se debe establecer en un tamaño menor para dejar más espacio libre en cada página de datos. Reduzca el trabajo de división y reorganización de páginas

Coherencia e integridad de los datos

Para garantizar la coherencia y la integridad de la base de datos, los diseñadores a menudo diseñan demasiadas relaciones entre tablas. una medida obligatoria para minimizar la redundancia de datos. Después de establecer una relación entre tablas, las operaciones de inserción, actualización y eliminación de la tabla principal y la tabla secundaria consumirán una sobrecarga del sistema. Además, es mejor no utilizar el campo de atributo Identificar como clave principal para relacionar tablas secundarias. Si la redundancia de datos es baja, la integridad de los datos se puede garantizar fácilmente, pero aumentará la cantidad de operaciones de consulta de combinación entre tablas. El uso de reglas y restricciones para evitar errores de datos causados ​​por entradas incorrectas por parte de los operadores del sistema es otra herramienta común utilizada por los diseñadores. Sin embargo, las reglas y restricciones innecesarias consumirán una sobrecarga innecesaria en el sistema y cabe señalar que las restricciones pueden validar los datos más rápidamente que las reglas.

Errores de las transacciones

Una transacción es un conjunto de operaciones que se completan a la vez y, aunque son operaciones separadas, SQL Server garantiza que se completarán todas o no se completarán en absoluto. . SQL Server proporciona control de transacciones implícito para cada declaración SQL individual, lo que permite que cada operación de datos DML se confirme o revierta por completo, pero SQL Server también proporciona declaraciones de control de transacciones explícitas

BEGIN TRANSACTION inicia una transacción

MIT TRANSACTION confirma una transacción

ROLLBACK TRANSACTION revierte una transacción

Las transacciones se pueden anidar y el nivel de anidación de transacciones se puede determinar utilizando la variable global @@trancount para recuperar la conexión. Cada confirmación de la transacción reducirá esta variable, y cada reversión de la transacción establecerá esta variable. Solo cuando se confirme la transacción (la última declaración de confirmación), los datos físicos se escribirán en el disco.

Ajuste del rendimiento de la base de datos

Teniendo en cuenta la configuración del hardware de la computadora y el diseño de la red, el rendimiento de la aplicación se verá afectado por una variedad de factores, incluido el rendimiento de la base de datos y el diseño del programa cliente. La mayoría de los diseñadores de bases de datos utilizan un enfoque de dos pasos para el diseño de bases de datos, comenzando con el diseño lógico y luego el diseño físico.

El diseño lógico de la base de datos puede eliminar todos los datos redundantes, mejorar la velocidad de procesamiento de datos, garantizar la integridad de los datos y expresar claramente la relación entre los elementos de datos. La correlación de consultas entre varias tablas (especialmente tablas grandes) reducirá el rendimiento de la base de datos. Por lo tanto, es necesario comprometer el diseño físico y determinar el volumen de datos de las tablas relacionadas y la frecuencia de acceso de los elementos de datos de acuerdo con las reglas comerciales. Para consultas relacionadas frecuentes de dichas tablas de datos, se debe aumentar la redundancia de datos.

Selección de tipos de datos

La selección razonable de tipos de datos tiene un impacto significativo en el rendimiento y funcionamiento de la base de datos. Hay muchos libros sobre este tema, pero las siguientes son algunas palabras de experiencia.

El campo de identificación no debe usarse como clave principal de la tabla para asociarla con otras tablas, porque esto afectará los datos. migración de la tabla

Los campos de texto e imagen pertenecen a datos de puntero, utilizados principalmente para almacenar objetos binarios grandes (BLOB), y su velocidad de operación es más lenta que la de otros tipos de datos.

La ventaja de los campos de fecha es que están soportados por una gran cantidad de funciones de fecha, por lo que comparar fechas y sumar y restar fechas es muy sencillo. Sin embargo, cuando la consulta se basa en la fecha, también es necesario usar una función, que es mucho más lenta que otros tipos de datos porque cuando se usa una función como condición de consulta, el servidor no puede usar estrategias de rendimiento avanzadas para optimizar la consulta y solo puede realice una exploración de la tabla para iterar sobre cada fila de la tabla. Solo puede realizar un escaneo de la tabla para iterar a través de cada fila de la tabla

Por ejemplo, desea consultar todos los registros del año en DATA_TAB (que tiene un campo de fecha llamado DATE) lishixinzhi/Article/program /Oracle/201311 /17929