uno. concepto
En un entorno de red, la aplicación de la base de datos es un patrón de estructura de múltiples capas C/S o múltiples. En este entorno, el desarrollo de aplicaciones de bases de datos debería considerar reducir la cantidad de transmisión de datos de red tanto como sea posible y mejorar la concurrencia tanto como sea posible. Según este propósito, se produce una tecnología de actualización de datos en caché. La operación se completa, los datos se envían a la base de datos a la vez en un momento adecuado, lo que reduce en gran medida el tráfico de red, reduce la carga en el servidor de la base de datos y mejora el rendimiento de la concurrencia.
Debe decirse que esta no es una tecnología muy nueva. Sin embargo, el autor descubrió que algunos programadores no prestan atención al uso racional de esta tecnología y aún se mantienen bajo la idea de aplicaciones independientes, lo que resulta en ineficiencia o posibles errores en los programas compilados. Por lo tanto, es necesario resumir las ventajas, principios y métodos de aplicación de esta tecnología (tomar Delphi como ejemplo).
dos. Pros y contras
La tecnología de actualización de datos con caché tiene las siguientes ventajas:
(1) Minimizar el tráfico de red y reducir el tiempo de acceso a los datos. Mejorar la eficiencia de los operadores de bases de datos de clientes.
(2) Reduce la carga en el servidor de la base de datos, porque muchas actualizaciones repetidas, modificaciones y operaciones de eliminación se pueden completar en el búfer del cliente, y los resultados solo se envían al servidor al final.
(3) Reducir de manera efectiva el tiempo de procesamiento de transacciones y reducir el rendimiento de las transacciones concurrentes. Esto puede garantizar mejor la consistencia de la base de datos.
Podemos dar un ejemplo para ilustrar su superioridad: el operador de la base de datos inserta un registro de datos en la base de datos, pero inmediatamente encuentra que el registro no cumple con los requisitos, por lo que elimina los datos. En este proceso, si se utiliza la tecnología de actualización de datos sin búfer, el lado del servidor realizará una operación de inserción y una operación de eliminación, y realizará dos transmisiones de datos de ida y vuelta en el lado del cliente y el servidor, y si dichos datos se usan con Otras tablas de base de datos. Si el método de actualización de datos se adopta con caché, estos dos pasos de las operaciones inversas se pueden completar en el búfer de datos del cliente sin ninguna acción al lado del servidor, y no se generará transmisión de datos de red y actualización en cascada de datos. Esto muestra las enormes ventajas de la tecnología de actualización de datos buffered.
Una desventaja de la actualización de datos con caché es que los datos se almacenan en el cliente, si otros usuarios cambian los datos, causará situaciones inconsistentes como la pérdida y la modificación. Considere completamente las variables. La aplicación de esta tecnología requiere ciertas habilidades y ciertos cambios de pensamiento.
tres. Principios de aplicación
Las ventajas de cualquier tecnología se reflejan en un determinado entorno.
(1) C/S o ocasiones de aplicación de base de datos múltiples con capas. En este caso, el tráfico de red puede reducirse efectivamente. En una situación independiente, la tecnología no tiene sentido.
(2) En el caso de la actualización de datos de múltiples tablas. Por ejemplo, en la actualización de la estructura principal de la tabla/detalle, la adición y la eliminación de las dos tablas a menudo se afectan entre sí. Esto acorta efectivamente el tiempo de transacción y garantiza mejor la consistencia de los datos.
(3) En ocasiones en que la capacidad de carga del servidor es limitada. Hoy en día, con el aumento en la velocidad de las PC y la disminución del precio, la diferencia en las capacidades de los clientes y los servidores se está volviendo cada vez más cada vez más pequeña, y las capacidades de servicio de los servidores se reducen relativamente. Objetivamente, se requiere reducir la carga del servidor desde la perspectiva del software, mientras que las actualizaciones de datos en busca de datos reducen la carga del servidor al compartir parte de la tarea de actualización por parte del cliente.
(4) En el caso de que la probabilidad de que los datos se actualicen al mismo tiempo sean relativamente bajos. Si es probable que varios usuarios actualicen los mismos datos en la base de datos en el mismo período, entonces esta situación no es adecuada para las actualizaciones en caché, porque en este caso, la sobrescritura de los datos se genera fácilmente, lo que resulta en una inconsistencia de los datos.
Cuatro. Descripción general de los métodos de control en Delphi
Como una popular herramienta de desarrollo de bases de datos, Delphi tiene ricas funciones de manipulación de bases de datos. Delphi proporciona un soporte integral para la tecnología de acceso a datos búferes. En general, Delphi proporciona a los usuarios varios controles de conjunto de datos para acceder a tablas de bases de datos, como TTable y TQuery; Hay una opción CachedUpdate en el control de la propiedad del conjunto de datos. Solo cuando se llama el método enviado real (como ApplyUpdates (), etc.), Delphi refleja los datos enviados reales a la base de datos. se actualiza cuando la tabla de la base de datos se actualice realmente. Esto nos proporciona conveniencia para controlar los pasos de la presentación de datos nosotros mismos. Además, a través de este modelo, reduce en gran medida la duración de las transacciones, reduce el tráfico de red y aumenta la confiabilidad de la aplicación. A continuación damos un módulo de aplicación específico para ilustrar cómo usar este modelo de programación.
cinco. Ejemplo del programa de Delphi
(1) Descripción de fondo de la aplicación
Supongamos que hacemos un módulo para el procesamiento de pedidos de productos. Este módulo implica tres tablas de base de datos: pedido de la tabla de pedidos (con campos como ID de pedido, cantidad de invitación, fecha de fecha, Nombre del cliente Costomer, etc.), Detalles de pedidos (con ID de detalle del pedido, ID de pedido y número de producto CommondityID), pedido Detalle (con ID de pedido, ID de pedido y número de producto CommondityID, cantidad de cantidad, precio de precio unitario y otros campos), almacenamiento de la tabla de inventario (incluido el número de producto CommondityID, acciones existentes y otros campos). Entre ellos, el pedido y la lista de pedidos son relaciones de uno a muchos, con el número de pedido OrderId como campo de conexión. Cada vez que se agrega un pedido, la tabla de inventario debe modificarse y la cantidad de bienes correspondientes vendidos se resta del inventario.
(2) Descripción del marco del programa
El siguiente es un marco para los programas Delphi, que explica aproximadamente cómo usar el modo de programación de las actualizaciones de caché. Los lectores pueden mejorar aún más las funciones de este programa por sí mismos.
orden de unidad;
{Nombre de la unidad}
interfaz
usos
{Módulo referenciado}
Windows, mensajes, sysutils, variantes, clases, gráficos, controles, formularios,
Diálogo, cuadrículas, dbGrids, extctrls, dbctrls, herramientas, actnman, actNctrls,
Actnmenus, db, dBtables;
Tipo
{Variables declaradas, controles agregados y métodos y procedimientos definidos}
TorderForm = class (tForm)
Tborder: ttable;
Tbdetail: ttable;
ORDDB: TDATABASE;
ActionMainMenubar1: TactionMainMenubar;
Dbnavigator1: tdbnavigator;
Dbgrid1: tdbgrid;
procedimiento TBORDERAFTERPOST (DataSet: TDataset);
procedimiento tbDetailNewRecord (DataSet: TDataset);
Procedimiento TBDetailUpdaterecord (DataSet: TDataset;
UpdateKind: TupdateKind;
procedimiento TBDetaIlafterPost (DataSet: TDataset);
procedimiento formulcreate (remitente: tobject);
Privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
varilla
OrderForm: torderForm;
Implementación
{$ R *.dfm}
{El siguiente es el marco principal del programa}
procedimiento torderform.FormCreate (remitente: tobject);
{Establezca las opciones de actualización de caché para la tabla principal y la tabla detallada a verdadero}
Comenzar
Tborder.cachedUpdates: = true;
Tbdetail.cachedUpdates: = true;
fin;
procedimiento torderform.tborderafterpost (conjunto de datos: tdataset);
{Después de enviar la actualización de la tabla de pedidos, ejecute el contenido de este proceso.
Nota: Si la propiedad CachedUpdates de un conjunto de datos es verdadera,
Entonces la acción posterior es solo una acción de confirmación en el búfer del cliente.
En lugar de enviarlo a la base de datos real. Para lograr un verdadero compromiso,
Se requiere la declaración AplicteUpdates. }
Comenzar
Ordendb.starttransaction; // La transacción de actualización inicia la ejecución
intentar
Tborder.applyUpdates; // Actualización real en la tabla principal
Tbdetail.applyupdates; // actualizaciones reales a la lista detallada
excepto
Ordendb.rollback; // Si ocurre un accidente, luego vuelva a reiniciar la transacción y salga del proceso
salida;
fin;
Ordendb.commit; // Si no se produce un accidente, complete la confirmación de transacción
Tborder.commitupdates; // Borrar el búfer del cliente de la tabla Tborder
Tbdetail.commitupdates; // Borrar el búfer del cliente de la tabla TBDetail
fin;
procedimiento torderform.tbdetailnewrecord (DataSet: tDataSet);
{La acción completada cuando se agrega una lista detallada. }
Comenzar
Tbdetail.fieldByName ('OrderId'). Asinteger: = tborder.fieldByName ('OrderId'). Asinteger;
Archivo: // Asignar el campo OrderId de la tabla principal al campo OrderId de la tabla detallada.
fin;
procedimiento torderform.tbdetailupdaterecord (DataSet: TDataset;
UpdateKind: TupdateKind;
{Cuando la tabla de la base de datos se actualiza realmente, las operaciones que deben realizarse simultáneamente se definen en el evento OnUpdaterecord.
En este caso, se realiza una operación de actualización en cascada de la lista detallada y la tabla de inventario.
Preste atención: las operaciones realizadas en este proceso son acciones realizadas cuando la base de datos realmente se actualiza.
En lugar de las acciones realizadas al actualizar los datos en caché del cliente}
Var temp_query: tQuery;
Comenzar
Si UpdateKind = UkinSert, entonces archivo: // Si el tipo de actualización es insertar un nuevo registro, luego actualice la cantidad de inventario correspondiente
con temp_query do
Comenzar
cerca;
Sql.clear;
SQL.Add ('Actualización de almacenamiento de almacenamiento stocks = stocks-: cantidad');
SQL.Add ('Where CommondityId =: CommondityId');
parambyName ('cantidad'): = tborder.fieldbyName ('cantidad'). asfloat;
ParambyName ('comdityid'): = tbdetai.fieldbyname ('comdityid'). Asinteger;
ejecutsql; // ejecutar la instrucción SQL para actualizar el inventario y reste la cantidad de inventario correspondiente.
fin;
fin;
procedimiento torderform.tbDetaIlaFterPost (DataSet: TDataset);
{Después de modificar los registros en la tabla detallada y enviar (publicar), ejecute las declaraciones en este proceso.
Preste atención: este tipo de envío está dirigido a los datos del cliente y no se refleja realmente en la base de datos.
En este ejemplo, la función implementada es calcular el campo de cantidad total de la tabla principal}
Comenzar
Tborder.fieldbyName ('dinero'): = 0;
con tbdetail do
Comenzar
primero;
Mientras que no es EOF
Comenzar
Tborder.fieldByName ('Money'): = tborder.fieldbyName ('dinero')+
FieldByName ('Price'). Asfloat*FieldByName ('Cantidad');
Archivo: // acumule la cantidad de la tabla detallada al campo de cantidad de la tabla principal
próximo;
fin;
fin;
fin;
fin.