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 di tasti disposti 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 NC, 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 l'utility ndsindex Lightweight Directory Access Protocol (LDAP). Gli Indici sono specifici del server.

Attivando il tag di Storage Manager (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 prevedere 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

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.