El beneficio de los hermanos contiguos

No tengo claro para qué sirven los hermanos contiguos.
¿Para que un registro apunte al anterior o el siguiente?
Nunca necesité hacer algo así excepto cuando programaba en QBasic5 tablas sin indexar y me inventé los índices.

Yo creía que el hermano anterior era el que tenía una clave anterior: numérica, alfabética o de fecha-hora, según un índice definido.
¿Que quería leer el anterior? ReadPrevious. ¿Siguiente? ReadNext.

Ya. Que aquí no hay eso. Ni tener un registro con clave A, otro con clave D y leer “B” para poner el puntero en medio o donde sea y pasar después al siguiente o anterior. O me parece que esto si es posible en Velneo, pero da igual, no voy a eso.

Por periodo de pruebas tengo en vERP 11.451 apuntes contables en la tabla APU_C relativos a 3162 asientos en la tabla ASI_C.
Borrar en 3P solo los apuntes desde un “Recorrer lista eliminando fichas” genera una transacción con 3.483.989 operaciones que tarda solo 43 minutos.
Captura
¿?
Solo hay asientos → apuntes, no más plurales con datos en otras tablas.
Ya me dieron en soporte algunas explicaciones y opciones pero …
¿Qué opinan ustedes de esto?

Bonus Info:
A medida que se eliminan fichas, el proceso elimina un mayor número de registros por segundo. Representado en gráfico supongo que resultaría exponencial.
Desde 8 registros en 5 segundos a más de 300 en 1 segundo así a ojo, por encima (en 3P).

Bonus Info2:
He quitado los dos campos a hermano contiguo de la tabla APU_C y la transacción devuelve en un minuto 12 segundos este resultado:
Captura

Hola carlosan.

Los enlaces hermano contiguo es una funcionalidad muy versátil de la Base de datos real y con aplicaciones muy interesantes.

Eso es la teoría, pero como hemos visto en muchas características de la Base de datos Real de Velneo, ponerlas en práctica y en arquitecturas cloud es otra cuestión.

Que ¿ qué me parece que la misma transacción pase de tardar 43 minutos a 1 minuto 12 segundos simplemente por eliminar 2 enlaces “virtuales” de la tabla, ya que las operaciones se reducen en un 98% ?

A mí, me parece muy mal, pero habría que consultar al diseñador o arquitecto de la Base de datos para que nos iluminara.

Saludos
Paco Satué

Exacto. Eso mismo pensaba yo.
La casualidad de estar importando datos a la aplicación. Y son tan solo 11.500 apuntes generados en 3 meses por una PYME.
Si el proceso de importación (también sin plurales) de 11.451 apuntes en 3P tarda 3 minutos 21 segundos, enganchando cada apunte a registro de asiento, a la cuenta de mayor y su auxiliar y buscando los NIF en la tabla ENT_M de entidades …
image
… no se comprende que el borrado en 3P, mucho más sencillo, tarde muchísimo más tiempo.
No me hago idea de si 3min 21s es mucho o poco para importar 11.451 apuntes contables en 3P, la verdad, pero puedo aceptarlo.

Bonus Info: Eliminación del primer apunte, mediante “seleccionar ficha por pos(1) / elim.ficha sel”
image

Eliminación de un segundo apunte !! OMG !! esto es iluminación !! No me lo esperaba !!
image

¿Y qué pasará en el tercero ? Tampoco me esperaba esto … ¿¿??
image

Cuarto, quinto y sexto seguidos pero de uno en uno:
image

Y diez registros borrados en un “Recorrer lista eliminando fichas”:
image

Creo que eso escapa mi numerología 8127 op / 10 registros= 812ops por registro eliminado, peor que borrando de uno en uno …

¿Y cien?
image

Pero si vacío la tabla de apuntes, importo solo 300 y luego los borro …
image
Son 939 operaciones al importar y 6153 al borrarlos, que no es lo mismo cuando hay 11000 apuntes más.

Yo creo que el problema en ese caso no son los punteros es que por cada baja se realiza el recalculo de saldos y ahí es donde viene el problema (Creo)

1 me gusta

Si quitas los hermanos contiguos entiendo que no hace el recalculo de saldos por eso gana, no por el puntero en si.

Si quieres puede probar a dejar los punteros y anular el recalculo de saldos, bien con el campo NO_CAL_SAL o bien con una variable que anule el recalculo.
image
El tema de recalculo de saldos, cuando hay volumen de apuntes a mi me lo hace bastante lento.

Hola, Friberam.

Eso mismo me ha dicho soporte.
Y, en efecto, tarda 1 minuto 10 seg. si los borro haciendo

Recorrer lista eliminando fichas
…Modificar campo (NO_CAL_SAL, 1)
image

Así que quitar los contiguos debía ocasionar que no se actualizasen los saldos … supongo.

Si quitas los contiguos no recalcula el saldo ya que no evalua el if. El efecto viene a ser el mismo.
Con cosas masivas, lo mejor es no calcular saldos y luego forzar un recalculo. Aunque creo que debería dársele una vueltecita al tema del recalculo y mejorarlo en la medida de lo posible.

1 me gusta

Hola carlosan.

O sea, que te pones a realizar pruebas de carga con las tablas de Velneo sin comprobar el código de los Triggers y además no compruebas el Inspector de errores cuando eliminas los campos Enlace a hermano contiguo.

Saludos
Paco Satué

1 me gusta

En efecto, Paco Satué.
Si necesitas un bocazas para hablar de algo sin conocimiento y que a la primera de cambio se pone a decir idioteces en el foro, quedo a tu disposición.
Al menos tengo esa triste experiencia.
Y como es una experiencia repetida, debo ser además más bruto que un arao.

Ruego disculpas y a ver si la próxima vez me machaco los dedos con un martillo antes de abrir temas sin sentido en el foro con el agravante de no haber atendido en primero lo que me explicó Antonio Vela en su respuesta de soporte …
Perdón.:pray:

1 me gusta

Hola carlosan.

Muchas gracias por reconocer los errores que por supuesto cometemos todos y de los que se aprende siempre algo.

No es necesario pedir disculpas porque seguramente habrá muchos que lean este hilo y se sentirán identificados por haber actuado de la misma forma ante un problema que se empeñan en achacar a Velneo.

Saludos
Paco Satué

2 Me gusta