Busqueda por indice complejo.


([N4] nicodigi) #1

Buenas
Hice un cambio en un programa que se esta usando, cree dos indices complejos para la búsqueda, hay un problema solo busca los registros nuevos, es decir después de la creación de los indices complejos y no los registros anteriores cuando no estaban creados, que son alrededor de 2000 registros.
Porque esto pasa ? Y como hago para indexar en la búsqueda nueva, los registros anteriores ?


([N4] eic) #2

Hola.

Cuando creas un índice complejo, debes regenerarlo desde vDataClient. No lo hace él solo. Entras en la solución de datos, buscas el índice complejo (aparece aparte de las tablas), y ejecutas la regeneración de índices sobre él.

Mira el apartado “Regeneración” en:

http://velneo.es/info_v7_718_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/proyecto_de_datos/indice_complejo/


([N4] gontorre) #3

Ten en cuenta, además, que tienes que regenerar el índice complejo cada vez que hagas una modificación en la estructura de la tabla que indexa.

Te lo cuento a las 20:54 desde la oficina haciendo precisamente eso :frowning:

Un saludo


([N3] pacosatu) #4

Hola Gonzalo.

Aclara eso,
¿Cuando es necesario regenerar el índice complejo?
¿Está documentado un tema tan importante y crucial como éste?
¿Cómo regeneran los Índices complejos los niveles N2 si no disponen de vDataClient y no quieren usar el API?

Ya me ha ocurrido alguna vez que la aplicación ha dejado de funcionar bien, y después de un buen rato me he dado cuenta que eran los Índices complejos. Quizás haya sido por un cambio de la estructura de la tabla, como comentas.

De todas formas, este es otro tema más en Velneo que está pésimamente rematado y con el añadido de que es un componente vital en la fiabilidad de nuestras aplicaciones.

En fin, a esperar mejoras en este tema.

Saludos
Paco Satué


([N4] gontorre) #5

Buenos días

En todos los índices complejos que tengo la “tabla asociada” y la “tabla para búsquedas” coinciden. Cuando modifico la estructura de esa tabla tengo que regenerar el índice. Si no lo hago las búsquedas devuelven valores erróneos. El problema es que la tabla en concreto tiene más de 2M de registros y tengo 6 índices complejos sobre ella. Al final, me lleva un rato.

Lo de regenerar los índices complejos si no tienes vDataClient es un problema. No lo había pensado. Veo que hay instrucciones para regenerar el área de datos de una tabla y los índices, pero no los índices complejos. Imagino que con el API se podrá hacer.

Un saludo


([N1] wikan) #6

Con la API se puede hacer, si no los niveles 2 estarías apañados.

Siempre he dicho que al final los componentes no debería ir con el nivel, si no los servicios que se ofrecen y los puestos de edición y ejecución.


([N4] Infortic) #7

Si que ocurre, cuando cambias la tabla que indexan, los índices no funcionan bien y hay que regenerarlos.

Este tema (índices en general, no sólo complejos), me parece aberrante en velneo, limita mucho los despliegues a proyectos pequeños, en una empresa que genera muchos millones de registros, no puede ser que para añadir un campo a una tabla tengas que parar el servicio varios días porque hay que regenerar los índices, es absurdo.

Como dice Manuel, regenerar se puede hacer desde el API, yo tengo una tabla de índices complejos, con un formulario y su rejilla para que el usuario pueda regenerarlos por sí mismo. Se podría incluso prescindir de la tabla y que por js leyera todos los índices complejos de los proyectos al vuelo para mostrartelos y poder regenerarlos a petición.


([N3] pacosatu) #8

Hola.

Lo más grave que le puede pasar a una herramienta es que no te fies de ella.
A mí me pasa eso con los Índices complejos.
Alguna que otra vez las búsquedas fallan y ha sido culpa de los Índices complejos.

En otros gestores de bases de datos me había acostumbrado a desentenderme de la administración de los índices y Velneo me gustó precisamente porque también permitía lo mismo, pero salieron los Índices complejos, que por otra parte era una necesidad obligada o Velneo quedaba obsoleto, y como ocurre ultimamente con otros temas han quedado incompletos.

Se necesita ya un mecanismo automático de regeneración de Índices complejos, tal como exigimos a cualquier herramienta del siglo XXI.

Saludos
Paco Satué


([N1] Ignacio F) #9

Hola

Yo en su día use bastante los índices complejos llegue a tener unos 30, y a día de hoy tengo 2, los tuve que quitar por varios motivos el tamaño que ocupan con muchos registros es descomunal, cada vez que tenía que regenerar índices llegaba a tardar entre 30 minutos y 1 hora por instancia con aplicaciones que tenían datos desde hace año y medio, no me quería ni imaginar lo que tardaría cuando lleve 5 años de datos, y lo más importante de vez en cuando el vServer se caía dando error en algún índice complejo, fue quitarlos y la ocupación en disco por instancia bajo un 50%, regenero índices en menos de 5 minutos y no se ha vuelto a caer ni una sola vez.

Yo uso este script con el que regenero índices normales y complejos


//Índices Normales
var project = theApp.mainProjectInfo();
for( var x=0; x < project.allTableCount(); ++x )
{
    var tableInfo = project.allTableInfo(x);
    theApp.regenIndexes( tableInfo.idRef(), true );
}
//Índices Complejos
var theMainProject = theApp.mainProjectInfo();
if ( theMainProject )
{
	for( var nIndex=0; nIndex < theMainProject.allObjectCount(7); nIndex++)
	{
		var indexInfo = theMainProject.allObjectInfo( 7, nIndex );
		if ( indexInfo )
		{
			theApp.regenComplexIndex( indexInfo.idRef(), 1 );
		}
	}
}
alert("Se han regenerado "+x+" índices de tablas.\n"+
	  "Se han regenerado "+nIndex+" índices complejos.");

([N4] gontorre) #10

Yo también había pensado en deshacerme de los índices complejos pero eso requeriría tener que duplicar determinados campos entre tablas maestro y detalle, y controlar mediante valores iniciales y triggers la integridad de los datos.

Tampoco me gusta la solución.

Un saludo


([N1] wikan) #11

@Ignacio tenías condicionado el índice complejo para que no indexará contenido no deseado?
Me refiero, he notado que campos que no tienen contenido a la “vista” se indexan. Por eso me he acostrumbado a los índices “críticos” ponerles condición para que elementos vacíos no los meta.