Compartir conduce al rendimiento

Traducido automáticamente de Deepl

Después de esta publicación en el blog sobre el nuevo concepto de selecciones de entidades compartibles y las subsiguientes discusiones en el foro, ahora nos tomaremos el tiempo para explicar cómo ORDA encaja en el futuro.

Hace varios meses, presentamos con orgullo ORDA y todos sus nuevos conceptos.

Usted aprendió que en ORDA, TODO es un objeto:

Más allá de esto, los días en los que estaba atascado con una única selección actual por tabla, se han acabado. Puede gestionar tantas selecciones de entidades como desee. Y ya que todo es un objeto, usted está listo para el código que es más fácil de manejar, la codificación genérica, y la serialización para comunicarse con otro software.

¿Sabía que todo esto viene de fábrica con 4D? No hay una pila de tecnología que manejar y no hay dolores de cabeza con un marco complejo.

4D v17 también incluyó otra opción muy importante: compartir datos entre procesos con objetos y colecciones compartidas. Ahora es muy fácil compartir varios datos entre procesos preventivos.

4D le lleva con confianza hacia un mundo de multihilos, aprovechando mucho las capacidades del procesador para mejorar el rendimiento de sus aplicaciones.

El mejor rendimiento y la codificación más fácil se basan en esta ecuación: objetos + compartir.

Y entonces llega el concepto de selecciones de entidades compartibles

estudiemos un primer caso de uso

Es posible que ya haya descubierto todas las ventajas del TRABAJADOR para ejecutar tareas en modo preventivo. Hasta ahora sólo se le podían pasar objetos y colecciones compartidas como referencia.

Imagina las ventajas que podrías obtener pasándole también selecciones de entidades como referencia… como cualquier elemento compartido.

He aquí un caso de uso apropiado:

1- Identificar las facturas pagadas y las no pagadas

2- Enviar correos electrónicos de acuse de recibo a los clientes por sus facturas pagadas y correos electrónicos de recordatorio por las impagadas. Debido a que esta tarea es potencialmente lenta, queremos delegarla a un TRABAJADOR en modo asíncrono.

El código podría ser el siguiente

var $paid; $unpaid: cs.InvoicesSelection
//Get entity selections for paid and unpaid invoices
$paid :=ds.Invoices.query("status=:1"; "Paid")
$unpaid :=ds.Invoices.query("status=:1"; "Unpaid")

//Pass entity selections as references to the WORKER
CALL WORKER ("mailing"; "sendMails"; $paid; $unpaid)

El método sendMails accederá a las selecciones de entidades pasadas como referencias. El código completo se ha proporcionado en esta entrada del blog.

¿Se ha dado cuenta de algo? Las selecciones de entidades se pasan «tal cual» al trabajador. Están listas para ser compartidas.

El siguiente paso: nuevas sesiones web

El siguiente paso es mejorar sus aplicaciones web con una potente gestión de sesiones diseñada para la escalabilidad.

En una futura versión, las sesiones web de 4D podrán manejar varios procesos( es decir, solicitudes) del mismo agente de usuario, al mismo tiempo. Esto no sólo mejorará el rendimiento, sino que proporcionará la gran ventaja de compartir información entre procesos.

Y eso no es todo. Podrás gestionar la autenticación personalizada asignando información a tu sesión web.

hablemos de un caso de uso

Imagina una empresa global(Acme Corp.) que vende ordenadores en todo el mundo a varios clientes (empresas, personas, escuelas, etc.) a través de una aplicación CRM.

Cada vendedor gestiona su propia cartera de clientes. Están conectados a la aplicación todo el día para hacer y registrar tratos en su cartera de clientes.

Podemos asumir que la base de datos contiene al menos 2 clases de datos vinculadas: Customers y SalesPersons (un vendedor tiene varios clientes).

En la imagen siguiente, podemos ver que:

  • Los 10 principales clientesde Acme Corp. se almacenan en Storage, por lo que se comparte entre todos los procesos que se ejecutan en la aplicación
  • Cada vendedor tiene su propia sesión con sus 10 principales clientes almacenados en ella
  • Los vendedores pueden navegar por cada página de la aplicación y ver sus 10 principales clientes, así como los 10 principales clientes de Acme Corp .

Estos «10 principales» son selecciones de entidades de clientes compartidas en el almacenamiento o en la sesión del usuario.

Entonces se hace muy fácil desarrollar formas de:

  • comprobar si un vendedor tiene un buen rendimiento( es decir, ¿hay una intersección entre sus 10 principales clientes y los 10 principales clientes de Acme Corp .)
  • refrescar los 10 principales clientes del vendedor
  • etc.

blank

más concretamente en código 4D

Los 10 principales clientesde Acme Corp . son selecciones de entidades Customers puestas en Storage, al menos al inicio de la base de datos:

Use (Storage)
Storage .acmeCorpTop10:=ds.Customers.all().orderBy("totalPurchase desc").slice(0; 10)
End use

La sesión web no es otra cosa que … un objeto: el objeto Session. Este objeto contiene un objeto compartido (atributostorage ) para que todas las peticiones atendidas por la sesión puedan compartir datos.

Cuando el vendedor se autentifica, es muy fácil almacenar sus 10 principales clientes con algún código como

// $salesID is the salesperson's ID
// Get the salesperson's top 10 customers
$top10:=ds.Customers.query("salesPerson.salesID = :1"; $salesID).orderBy("totalCompra desc").slice(0; 10)
// Put $top10 in the session
Use (Session.storage)
Session .storage.myTop10:=$userTop10

End use

Nota: El ejemplo de código anterior es un avance de una futura versión de 4D.

A continuación, todos los procesos(es decir, las solicitudes) procedentes del agente de usuario pueden acceder a estos 10 clientes principales.

Tenga en cuenta que pone las selecciones de entidades «tal cual» en Storage y en la sesión. No es necesario copiarlas como compartibles.

Esto es posible porque las selecciones de entidades son compartibles por defecto.

en conclusión

Hemos optado por dar una ventaja a todos los casos de uso futuros relacionados con la escalabilidad y el rendimiento, que deberían ser los principales problemas de sus futuras aplicaciones. Un usuario final feliz es aquel que obtiene el resultado correcto en el menor tiempo posible.

Tenga en cuenta que el propósito de una selección de entidad compartible es ser manejada como una referencia. Es más ligero en memoria.

Además, algunas optimizaciones transparentes son manejadas por 4D para usted cuando utiliza selecciones de entidades compartibles: mientras se copian las selecciones de entidades, si se pide un resultado compartible, siempre que sea aplicable, 4D no hace una copia de las selecciones de entidades sino que devuelve la misma referencia.

Gracias a todo esto, se evita copiar las selecciones de entidades como compartidas cada vez que quiera compartirlas. Creemos que estos tiempos serán muy abundantes a medida que vayamos avanzando hacia la ejecución de código en modo preventivo gracias al continuo progreso de los procesadores de múltiples núcleos.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.