2.1 Database FLAIM

eDirectory utilizza FLAIM come database. FLAIM (Flessibile Adattabile Information Manager) viene utilizzato per le informazioni tradizionali, volatili e complesse. È un motore di database molto scalabile che supporta più lettori e un modello di concorrenza a scrittura singola. I lettori non bloccano gli scrittori e questi non bloccano i lettori.

Fisicamente, FLAIM organizza i dati in blocchi. Generalmente, alcuni blocchi vengono conservati in memoria e costituiscono la cache di blocchi. La cache voci (detta anche cache di record) memorizza nella cache le voci logiche provenienti dal database. Le voci vengono costruite da elementi nella cache di blocchi. FLAIM conserva le tabelle hash per entrambe le cache. La dimensione del compartimento di hash viene periodicamente regolata in base al numero di elementi.

Di default, eDirectory utilizza una dimensione del blocco di 4 KB. La dimensione della cache di blocchi per la memorizzazione nella cache dell'intero DIB è uguale alla dimensione del DIB mentre la dimensione richiesta per la cache voci è pari a circa due/quattro volte la dimensione del DIB.

Durante il recupero di una voce, FLAIM verifica innanzitutto la voce nella cache voci. Se la voce esiste, la lettura dalla cache di blocchi non è necessaria. Durante il recupero di un blocco dal disco, FLAIM verifica innanzitutto il blocco nella cache. Se non esiste, la lettura del disco non è necessaria.

Quando una voce viene aggiunta o modificata, il commit dei blocchi corrispondenti per tale voce non viene eseguito direttamente sul disco. Perciò, il disco e la memoria potrebbero non essere sincronizzati. Tuttavia, gli aggiornamenti realizzati per la voce vengono registrati nell'RFL (Roll-Forward Log, log di roll forward). Un RFL viene utilizzato per ripristinare le transazioni dopo un errore di sistema.

LRU (Least Recently Used, utilizzati meno di recente) è l'algoritmo di sostituzione utilizzato per la sostituzione degli elementi nella cache.

2.1.1 Punto di controllo

Un punto di controllo porta la versione su disco del database allo stesso stato coerente del database presente nella memoria (cache). FLAIM è in grado di eseguire un punto di controllo durante l'attività di aggiornamento minimo sul database. Viene eseguito ogni secondo e scrive i blocchi modificati (cache modificata) sul disco. I blocchi che vengono modificati nella cache, ma non ancora scritti sul disco sono denominati "blocchi modificati". FLAIM acquisisce un blocco del database ed esegue la quantità massima di lavoro possibile fino al completamento del punto di controllo o fino a quando non vi sia un altro thread in attesa per l'aggiornamento del database. Per evitare una sincronizzazione non sufficiente del database, sussistono alcune condizioni in cui un punto di controllo viene imposto anche se i thread sono in attesa per l'aggiornamento del database:

  • Se il thread del punto di controllo non riesce a completare un punto di controllo all'interno di un intervallo di tempo specificato (il valore di default è 3 minuti), viene forzato e la cache modificata viene pulita.

  • Se la dimensione della cache modificata è maggiore della maxdirtycache (se impostata), viene forzato un punto di arresto per ridurre le dimensioni della cache modificata riducendola a quelle della mindirtycache (se impostata) o a zero.

2.1.2 Indici

Un indice è un set di chiavi disposte in modo tale da velocizzare notevolmente l'attività di ricerca di una particolare chiave all'interno dell'indice. Le chiavi dell'indice vengono costruite estraendo i contenuti di uno o più campi (attributi) dalle voci. Gli indici sono mantenuti nella cache di blocchi. Qualsiasi modifica agli attributi indicizzati richiede modifiche nei blocchi dell'indice.

eDirectory definisce un set di indici di default per gli attributi di sistema (campi). Attributi di sistema come parentID e ancestorID vengono utilizzati per le ricerche a livello unico e per quelle elaborate nel sottoalbero. Questi indici non possono essere sospesi o eliminati. La directory li utilizza internamente. Gli indici di default sono definiti per attributi quali CN, cognome, nome specificato e così via. Gli indici possono essere di tipo presenza, valore e stringa secondaria. Tali indici possono essere sospesi. Se eliminati, vengono ricreati automaticamente.

Per creare gli indici, è possibile utilizzare iManager o la utility ndsindex Lightweight Directory Access Protocol (LDAP). Gli Indici sono specifici del server.

Abilitando il tag di Gestione archivio (StrMan) in DSTrace (ndstrace), è possibile visualizzare l'indice scelto per le interrogazioni di ricerca.

L'esempio riportato di seguito è per un log DSTrace, in cui si prevede una ricerca del sottoalbero utilizzando "cn=admin", CN.

3019918240 StrMan: Iter #b239c18 query ((Flags&1)==1) && ((CN$217A$.Flags&8=="admin") && (AncestorID==32821))
3019918240 StrMan: Iter #b239c18 index = CN$IX$220

L'esempio riportato di seguito è per un log DSTrace, in cui si prevede una ricerca del sottoalbero utilizzando"Description= This is for testing", AncestorID.

2902035360 StrMan: Iter #83075b0 query ((Flags&1)==1) && ((Description$225A$.Flags&8=="This is for testing") && (AncestorID==32821))
2902035360 StrMan: Iter #83075b0 index = AncestorID_IX

Per migliorare le prestazioni di ricerca con l'ordinamento sul lato server, utilizzare l'opzione -a per aggiungere come prefisso l'attributo AncestorID all'elenco di attributi trasferiti quando si crea un nuovo indice.

2.1.3 Log di roll forward

FLAIM registra le operazioni per ogni transazione di aggiornamento in un file dell'RFL. Un RFL viene utilizzato per recuperare le transazioni da un errore di sistema o durante il ripristino da un backup. Il file RFL viene troncato dopo il completamento di ogni punto di controllo a meno che non sia attivato (rflkeepfiles) utilizzando un backup costante a caldo.

2.1.4 Containerizzazione degli attributi FLAIM

Per garantire un utilizzo ottimale della cache voci e prestazioni migliorate delle operazioni di ricerca degli attributi, FLAIM memorizza gli attributi con i valori più grandi o con il numero di valori più elevato in un'ubicazione separata, ovvero, nel container di attributi. Lo spostamento di default nel container viene eseguito automaticamente quando l'attributo:

  • ha più di 25 valori

  • ha un valore superiore a 2048 byte

Per disabilitare la containerizzazione automatica degli attributi, aggiungere disablemovetoattrcontainer =1 nel file _ndsdb.ini, quindi riavviare eDirectory.

eDirectory fornisce la flessibilità per pianificare lo spostamento degli attributi. Prima, vengono visualizzati gli attributi che sono pronti per essere spostati, quindi, è possibile pianificare lo spostamento in un secondo momento, in base alle proprie esigenze.

Per visualizzare il numero di attributi pronti per essere spostati ai container di attributi, eseguire il comando ndscheck. Per visualizzare i dettagli degli attributi, utilizzare l'attributo dsContainerReadyAttrs di iMonitor negli oggetti Pseudo server in Configurazione dell'agente. L'utente può trovare anche gli attributi contrassegnati per l'indicizzazione in Stato dell'agente.

È possibile avviare la containerizzazione degli attributi utilizzando l'opzione Riparazione singolo oggetto del comando ndsrepair per l'oggetto Pseudo Server. Per eseguire la containerizzazione di un attributo, eseguire il comando ndsrepair con il nuovo switch -am avanzato seguito dal nome dell'attributo, come mostrato di seguito:

ndsrepair –J <Pseudo server object ID> –Ad –AM/–am <attribute name>

Dopo aver spostato un attributo al container di attributi, eDirectory crea un indice del sistema con il nome dell'attributo. Quando viene eseguita la containerizzazione di un attributo, non è possibile spostarlo nuovamente al container originale.

NOTA:se un attributo ha un valore maggiore di 2048 byte, viene comunque spostato nel container ma eDirectory non crea alcun indice di sistema.