Resultado de varias tablas


([N1] wikan) #1

Buenas, vengo en busca de inspiración.

Estoy añadiendo un requerimiento de un cliente para una aplicación en cloud, por lo que el rendimiento debe ser bueno.

La cuestión es que quiere ver, desde los puntos de venta, una búsqueda de artículos con su precio y stock.

¿Problema?
Son 3 tablas distinas, Artículos, Tarifas de venta y Existencias.

  • Por lo que usar la tabla de artículos con punteros…descartado
  • Tabla en memoria construyendo la tabla con cada búsqueda…lo veo ineficiente.
  • Crear otra tabla para guardar agrupar esas 3…
    Para cada artículo, cada tarifa ( No de venta, si el maestro de tarifas ) y almacenes. Generar un registro para poder mostrar dicha búsqueda con un rendimiento aceptable.

Me estoy decantando por la última opción, aunque requiera mas trabajo de mantener, ya que al generar un almacén por ejemplo, habría que generar ya la lista de artículos-almacén…

Opiniones, ideas, sugerencias…cualquier cosa es bienvenida.

Gracias


([N2] Mgalvezh) #2

Hola, estas trabajando los puntos de venta on line contra el servidor ? los puntos de venta son pcs?

Saludos.

Miguel.


([N1] wikan) #3

Buenas Miguel,
si a las dos. Es totalmente en cloud, y son pcs con Windows


([N3] pacosatu) #4

Hola Manuel.

¿Has probado la eficacia de la caché en estos casos?
Tengo entendido que Velneo cachea siempre las tablas y todos los punteros que tenga asociados. Precisamente Velneo alardea del buen funcionamiento de la caché para la optimización en cloud.

Si la caché hace bien su trabajo, sería suficiente con cargar en segundo plano las tablas afectadas al inicio de la Aplicación o cada cierto número de ejecuciones. Quizás la de Existencias es la más problemática por ser la que se actualiza más a menudo.

Saludos
Paco Satué


([N1] wikan) #5

Buenas,
por ahora he probado:

  • Directamente desde la tabla de artículos resolviendo punteros: error. Deja hasta colgado el vClient.
  • Una tabla en memoria para generar la agrupación de eso 3 campos: Artículos, Tarifas de venta y existencias: Bueno…cuesta bastante mover la rejilla.

Ya estoy pensando cada vez más montar la tabla en disco y currarme que siempre esté actualizada.
Otra historia que había pensado era montarlo con QML a ver que tal iba, quizás sea problema de la rejilla que se actualiza y actualiza y por ese queda tan lenta.

Ya si no, esperar a la salida de la 7.15, y ver como funciona la rejilla re-programada.


([N3] pacosatu) #6

Hola Manuel.

Me estoy quedando helado. No puede ser que descargar una simple consulta del servidor remoto deje colgado el vClient. La Rejilla hace una precarga en caché para permitir la navegación y el resto de registros se cargan en segundo plano usando otro hilo, por lo tanto el interface de vClient se libera tras mostrar los primeros registros. Si no es así que lo aclaren inmediatamente los que conozcan la arquitectura cliente-servidor de Velneo (yo de momento soy incapaz de encontar buena documentación al respecto).

Otra cosa es que antes de mostrar la Rejilla algún proceso esté forzando a procesar toda la lista (por ejemplo acumular algún dato para totalizar) y por esta razón se fuerza a cargar todos los registros en el hilo principal antes de necesitar mostrarlos.

La solución de montar una tabla en disco y currarse su actualización supone crear un Caché paralelo al que ya tiene Velneo y estaríamos desaprovechando esta funcionalidad que entre otras cosas es lo que hace rápido y óptimo a Velneo en el Cloud.

Saludos
Paco Satué


([N2] Mgalvezh) #7

Paco tiene razón, se supone que este montaje debe de funcionar en Velneo, si no estamos en el mismo problema de todos los sistemas, no se puede trabajar on line, necesitamos Terminal Server, o servidor en local y replicación por tcp, un atraso, revisa el código no sea como dice paco que algo obligue a reprocesar las listas.

En cuanto a la 7.15, no creo que cambie mucho.
Saludos.
Miguel.


([N1] wikan) #8

Buenas,
al final lo he montado con una tabla en memoria.
Para ganar algo de rendimiento lo he echo con javascript, para evitar crear manejador ( tiene cierto retardo ), y cestas.

  • Busca los articulos
  • Mediante la función velneoDB.tubo, envio el resultado a la tabla en memoria, resolviendo los punteros, con variables globales en memoria también.
  • Limpio la rejilla y pongo la lista nueva.

Si cachea los registros uno vez mostrados, por lo que la primera búsqueda es mas lenta. Luego va “algo” más rápido.

En resultado por ahora no me desagrada, teniendo en cuenta que el cloud de Velneo es perfecto para probar sistemas críticos. El servidor del cliente tiene menos latencia y es mas potente. Mi adsl es de 1.6Mb, osea que espero que en el cliente el resultado sea aún mejor.


([N4] rpaton) #9

Hola:
¿Puedes mostrar como has hecho el montaje que indicas?
1-¿Has realizado una búsqueda en tercer plano sobre la tabla de Artículos y con el VelneoDB.tubo has pasado los registros a la tabla de memoria?
2-¿Recorres la tabla de memoria y actualizas los precios con la tabla de Tarifas de Venta?
3-¿Recorres la tabla de memoria y actualizas las existencias con la tabla de Existencias?

¿Es así como lo has realizado? Yo tengo que crear una tabla de memoria de los artículos asignados a un Cliente si los tiene asignados y en caso contrario los asignados a un Grupo de Clientes. Después tengo que añadir a cada registro el código que utiliza ese Cliente o Grupo para referirse al mío. Es decir, mi código “1”, que es “lata de sardinas”, para el Cliente es “223LAT” y para el Grupo en su caso “LT45SA0998”.
Tengo que presentar una rejilla con los tres códigos y el usuario debe poder buscar o elegir por cualquier de ellos.

Saludos.

Ricardo Patón


([N1] wikan) #10

Buenas @rpaton,

La tabla la deje con 3 campos
-Articulo
-Tarifa de venta
-Existencia

hago la búsqueda en la tabla de artículos y lo guardo en la tabla en memoria.

en un principio enlaces desde la tabla en memoria para revolser la tarifa y las existencias del almacén pero era…lentoooooooooooo ( creo que la rejilla intenta refrescas esos punteros siempre )

Así, desde la propia tabla de artículos, cree esos mismos punteros y los resuelvo con variables globales en memoria.

A la hora de hacer la búsqueda, le asigno valor a las variables, se resuelve los punteros y guarda el valor en la tabla en memoria


([N4] rpaton) #11

Gracias Manuel.

Voy a probarlo como lo has tú.

Saludos.

Ricardo Patón