Pagina 1 di 1

ldapsearch e count entries

Inviato: mer feb 15, 2012 12:58
da ZeroUno
Eseguo delle query ldap con ldapsearch e ho bisogno che in output mi venga mostrato il numero di risultati anzichè tutto l'output.

Solitamente faccio

ldapsearch -x -b "ou=test,dc=it" "uid=*" dn|grep ^dn|wc -l


ma questo presuppone che il server restituisca tutto l'output (che può essere bello grosso in caso di milioni di entries), il che rallenta.

E' possibile dire al server di restituire solamente il numero di entries?

ldapsearch -x -b "dc=it" -s one "ou=test" numsubordinates
qualche volta aiuta, ma in caso di query particolari tipo uid=xxx* non è utile.

mi sembra che ldapsearch di opends abbia l'opzione --countentries ma io ho a disposizione:
389-ds, openldap, sunds
e mi sembra che nessuno dei tre abbia tale opzione e non ne ho trovate di similari.

Re: ldapsearch e count entries

Inviato: mer feb 15, 2012 15:13
da masalapianta
se usi openldap ti serve l'overlay noopsrch, non so se esiste qualcosa di equivalente per 389-ds e sun directory server

Re: ldapsearch e count entries

Inviato: mer feb 15, 2012 15:44
da ZeroUno
openldap lo uso solamente come client, però comunque non mi aspettavo dover fare una modifica lato server; pensavo che chi ha creato lo standard ldap ci avesse pensato ad inserire questa funzione. O almeno speravo che se non fosse il server a restituire il numero di oggetti, almeno lo potesse fare il client; certo, le prestazioni non sarebbero state le stesse ma comunque mi evitavo la wc.

Re: ldapsearch e count entries

Inviato: mer feb 15, 2012 15:50
da masalapianta
ZeroUno ha scritto:openldap lo uso solamente come client, però comunque non mi aspettavo dover fare una modifica lato server; pensavo che chi ha creato lo standard ldap ci avesse pensato ad inserire questa funzione.

un directory server non è un rdbms, il protocollo ldap è pensato per fare poche cose e farle molto velocemente
O almeno speravo che se non fosse il server a restituire il numero di oggetti, almeno lo potesse fare il client; certo, le prestazioni non sarebbero state le stesse ma comunque mi evitavo la wc.

uh? ma ci metti pochissimo a scriverti un client o a modificare i sorgenti di ldapsearch per fare il count delle entries senza stamparti queste ultime; di solito questa funzione non serve perchè, se devi fare dei count su directory medio piccole, ti fai uno slapcat in locale (molto veloce) e poi ti parsi il risultato facendo tutte le statistiche che vuoi; se invece la directory è molto grande, come la metti la metti qualunque operazione di questo tipo è pesantissima e ti ammazza le prestazioni del directory server, quindi è preferibile tenere il conto delle entries in tempo reale utilizzando un attributo apposito ('count' o quel che vuoi) nella entries sotto la quale ci sono tutte le entries di cui vuoi tenere traccia), quindi ogni volta che aggiungi una entry aggiorni l'attributo contatore, idem se ne cancelli una, o utilizzando dei trigger tipo gli overlay di openldap oppure facendo fare al client

Re: ldapsearch e count entries

Inviato: mer feb 15, 2012 20:34
da ZeroUno
Purtroppo il mio ldap ospita 1.5 milioni di utenze per un totale di 10 milioni di entry e oltre 10 GB di spazio occupato tra dati e indici.
Purtroppo non è una mia scelta (all'inizio non sapevo neanche come funzionava un ldap).
Con il tipo di indicizzazioni che ho messo comunque le ricerche vanno abbastanza veloci.

Per il conteggio del totale delle entry in un ramo non ho bisogno di aggiungere contatori, basta il numsubordinates, ma per conoscere quanti sono gli utenti che cominciano per pippo o per pluto non esiste contatore che tenga; solo indicizzare bene, cercare e contare.

Per modificare il sorgente di ldapsearch dovrei studiarmi il codice e considerando che conosco il C ma non ne sono un esperto non mi conviene (anche perchè mi serve una volta al mese; tanto vale usare wc); mi sembrava strano solo che non lo avesse fatto chi ha scritto ldapsearch. Stavo provando ad utilizzare il modulo ldap di php (che conosco meglio) ma poi ho lasciato perdere perchè non conviene.

Alla fine ho filtrato quanto mi serve e buttato in un file opportunamente formattato una entry per riga e sono andato di grep.

Mi riproporrò il problema credo tra qualche mese, quando avrò bisogno di rifare le statistiche.