Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

martes, 20 de octubre de 2015

Evitar bdb_equality_candidates en OpenLDAP creando índices

El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, por medio de identificador único de cada fila de una tabla, permitiendo un rápido acceso a los registros de una tabla en una base de datos. Al aumentar drásticamente la velocidad de acceso, se suelen usar, sobre aquellos campos sobre los cuales se hacen frecuentes búsquedas.
El índice tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.
Los índices pueden ser creados usando una o más columnas, proporcionando la base tanto para búsquedas rápidas al azar como de un ordenado acceso a registros eficiente.
Los índices son construidos sobre árboles BB+B* o sobre una mezcla de ellos, funciones de cálculo u otros métodos.
El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de almacenamiento de la tabla (puesto que los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no cabrían en ella. En una base de datos relacional un índice es una copia de una parte de la tabla.
(Fuente Wikipedia)

Cuando en nuestro log aparece algo como :

Oct 20 10:22:01 server slapd[16752]: <= bdb_equality_candidates: (memberUid) not indexed

quiere decir que se ha realizado una búsqueda por un campo el cual no esta indexado y ha sido consultado mediante equal (ya veremos más adelante que significa). De haber estado indexado, la búsqueda sería más rápida. Así pues, una vez creada nuestra base de datos deberíamos indexarla por aquellos campos que sabemos que van a ser consultados.

Creamos un archivo LDIF llamado, por ejemplo,  olcDbIndex.ldif con este contenido (puedes variarlo según tus necesidades):
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: sn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: uid pres,sub,eq
-
add: olcDbIndex
olcDbIndex: displayName pres,sub,eq
-
add: olcDbIndex
olcDbIndex: default sub
-
add: olcDbIndex
olcDbIndex: uidNumber eq
-
add: olcDbIndex
olcDbIndex: gidNumber eq
-
add: olcDbIndex
olcDbIndex: mail,givenName eq,subinitial
-
add: olcDbIndex
olcDbIndex: dc eq
Para saber exactamente que significa pres, sub y eq sería conveniente saber estas definiciones:
  • pres (presence) debe usarse si buscamos mediante un atributo especifico.
  • approx (Approximate) se debe usar si buscamos por resultados que sean similares a nuestra busqueda "sn~=person". Es decir, que el resultado se aproxime. 
  • sub (substring) debe utilizar en las búsquedas del timpo “sn=sm*”. Es decir, con comodines. 
  • eq (equality) se debe usar en comparaciones directas. Es decir, en comparaciones de igualdad.
Una vez entendido y generado el archivo LDIF, ahora tenemos que inyectarlo en la base de datos mediante el comando ldapmodify :

ldapmodify -Y EXTERNAL -H ldapi:/// -f ./olcDbIndex.ldif

Importante crear siempre una copia de seguridad antes de manipular la base de datos.


No hay comentarios:

Publicar un comentario


That u don't know what you've got 'til it's gone