El uso de ORDA para acceder a grandes tablas (especialmente aquellas con relaciones) en modo Cliente/Servidor ha sido mejorado en gran medida. Con 4D v17 R5, verá una mejora de 2-3 veces en el rendimiento LAN y hasta 30 veces más rápido en el rendimiento WAN. Y lo mejor de todo – no hay necesidad de cambiar nada en su código, todo es automático. Interesante, ¿verdad? Bueno, profundicemos en los detalles.
Normalmente, cuando se carga un registro en una aplicación cliente, todos los campos del registro se transfieren desde el servidor. Incluso los que no necesitas. Por lo tanto, el rendimiento depende del diseño de su aplicación, de la estructura de su base de datos y de las capacidades de la red… especialmente cuando se utilizan tablas grandes con campos múltiples o grandes. Por ejemplo, en una WAN lenta, usando sólo unos pocos campos en cuadros de lista basados en la selección (de tablas con docenas de campos que tienen muchas relaciones/campos y texto/imágenes grandes), su aplicación estará pronto fuera de servicio.
Las solicitudes de ORDA utilizaban anteriormente el mismo principio de carga de campos… ¡hasta ahora! Con v17 R5, el servidor analiza los atributos que necesita en cada clase de datos e identifica los atributos relacionados para que sólo los datos solicitados sean transferidos entre el servidor y el cliente.
CASO PRÁCTICO
Para ilustrar estas mejoras, vamos a utilizar una base de datos sencilla:
La tabla Libro tiene 1.000 registros. Su campo resumen contiene entre 100 y 2.000 caracteres y su campo miniatura contiene unas imágenes de 10KB. En la tabla Autor relacionada, el campo biografía contiene 10.000 caracteres en cada registro.
Utilizando esta base de datos, hemos creado dos cuadros de lista basados en la selección: uno utilizando una selección de entidad ORDA y el otro utilizando una selección clásica. En cada cuadro de lista, hemos elegido mostrar el título del libro con su autor para activar las relaciones. También hemos añadido una acción para desplazar automáticamente el cuadro de lista para que ninguna acción humana pueda perturbar los resultados:
Las medidas de la tabla siguiente muestran las tramas TCP que se transmitieron entre el servidor y el cliente (incluyendo todas las respuestas de acuse de recibo) del ejemplo del vídeo. La conexión de red del cliente es de tipo Wi-Fi «802.11ac» (250Mbps de descarga, 100Mbps de subida, con 1ms de retraso):
Mode | Frames | Overall size (bytes) | Duración (ms) |
Clásico | 4,070 | 473,924 | 5,747 |
ORDA | 46 | 6,744 | 692 |
Como se puede ver, ¡el uso de ORDA significa que sólo se transfieren unos pocos fotogramas! ¿Y la duración? Cuanto más lenta sea la red, mayor será la diferencia entre ORDA y el enfoque clásico.
Un nuevo concepto: Contexto de OPTIMIZACIÓN
Esto permite registrar lo que el sistema ha aprendido, y reutilizarlo más tarde. Para ello, basta con crear un objeto de opción que contenga un atributo«contexto» y, a continuación, especificar el valor deseado antes de establecer el objeto como parámetro:
Si (Form.currentContext=Null)
Form .currentContext:=New object("context"; "contextListboxBookAndAuthor")
End if
Form .books:=ds.Book.all(Form.currentContext)
Este objeto de opción puede utilizarse ahora con el Create entity selection y los siguientes métodos miembros: dataClass. query (), entitySelection. query (), dataClass . fromCollection (), y dataClass. all().
N.B: En la tabla de medidas, no hemos activado la función de contexto para ser lo más precisos posible.
Para concluir:
ORDA simplifica sus desarrollos:
- Acelera la transferencia de información – sin cambios de código.
- No es necesario mover grandes campos de una tabla y almacenarlos en una tabla relacionada con 1-1 para evitar impactos en el modo Cliente/Servidor.
- Cuando quiera acceder al servidor fuera de la LAN, ahora puede conectar el cliente directamente… sin usar tecnologías de escritorio remoto.