O eDirectory usa o FLAIM como seu banco de dados. O FLAIM (Flexible Adaptable Information Manager — Gerente de Informações Adaptável e Flexível) é usado para informações tradicionais, voláteis e complexas. Ele é um mecanismo de banco de dados altamente escalável que suporta múltiplos leitores e um modelo de apenas um gravador simultâneo. Leitores não bloqueiam gravadores e gravadores não bloqueiam leitores.
Fisicamente, o FLAIM organiza os dados em blocos. Alguns blocos são tipicamente mantidos na memória. Eles representam o cache do bloco. O cache de entrada (por vezes chamado de cache de registro) retém as entradas lógicas do banco de dados. As entradas são construídas de itens no cache do bloco. O FLAIM mantém tabelas de hash para ambos os caches. O tamanho do compartimento de memória de hash é ajustado periodicamente com base no número de itens.
Por padrão, o eDirectory usa um tamanho de bloco de 4 KB. O tamanho do cache do bloco para armazenar o DIB total é igual ao tamanho do DIB, e o tamanho necessário para o cache de entrada é cerca de duas a quatro vezes o tamanho do DIB.
Ao obter uma entrada, o FLAIM verifica primeiramente a entrada no cache de entrada. Se ela existir nele, não será necessário ler o cache do bloco. Ao obter um bloco do disco, o FLAIM verifica primeiramente os blocos no cache. Se o bloco existir, não será necessário realizar uma operação de leitura de disco.
Quando uma entrada é adicionada ou modificada, os blocos correspondentes desta entrada não estão diretamente comprometidos com o disco, por isso o disco e a memória podem não estar em sintonia. Contudo, as atualizações na entrada são registradas no registro de transações individuais (RFL). Um RFL é usado para recuperar transações após uma falha do sistema.
Usado mais recentemente (LRU) é o algoritmo usado para substituir itens no cache.
Um ponto de verificação traz a versão presente no disco do banco de dados para o mesmo estado coerente que o banco de dados na memória (armazenado). O FLAIM pode realizar um ponto de verificação durante a atividade de atualização mínima no banco de dados. Ele é executado a cada segundo e grava os blocos modificados (cache modificado) no disco. Os blocos que são modificados no cache, porém ainda não são escritos no disco, são chamados de "blocos modificados". O FLAIM bloqueia o banco de dados e realiza o máximo de trabalho possível até que o ponto de verificação seja concluído ou outro thread esteja aguardando para atualizar o banco de dados. Para evitar que os bancos de dados no disco fiquem muito fora de sincronia, existem condições sob as quais é forçada a realização de um ponto de verificação mesmo se existirem threads aguardando para atualizar o banco de dados:
Se um thread de ponto de verificação não puder concluir um ponto de verificação dentro do intervalo de tempo especificado (o padrão é três minutos), ele será forçado e o cache modificado será apagado.
Se o tamanho do cache modificado for maior do que maxdirtycache (se definido), um ponto de verificação será forçado a reduzir o tamanho do cache modificado para o definido em mindirtycache (se definido) ou para zero.
Um índice é um conjunto de chaves organizado de maneira a acelerar significativamente a tarefa de encontrar qualquer chave específica dentro do índice. As chaves de índice são formadas ao extrair o conteúdo de um ou mais campos (atributos) das entradas. Os índices são armazenados no cache do bloco. Qualquer mudança nos atributos indexados exigirá mudanças nos blocos do índice.
O eDirectory define um conjunto padrão de índices para atributos do sistema (campos). Atributos do sistema, como parentID e ancestorID, são usados em pesquisas de um nível e de subárvore. Esses índices não podem ser suspensos ou apagados. O diretório os utiliza internamente. Os índices padrão são definidos para atributos, como CN, Sobrenome e Nome, entre outros. Índices podem ser do tipo de presença, valor e subcadeia. Esses índices podem ser suspensos. Ao serem excluídos, eles são automaticamente recriados.
Você pode usar o iManager ou o ndsindex do utilitário LDAP (Lightweight Directory Access Protocol) para criar índices. Índices são específicos de cada servidor.
Ao habilitar a tag do Gerenciador de armazenamento (StrMan) no DSTrace (ndstrace), você poderá ver o índice escolhido nas pesquisas.
O exemplo a seguir mostra um registro de DSTrace para uma pesquisa de subárvore usando "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
O exemplo a seguir mostra um registro de DSTrace para uma pesquisa de subárvore usando "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
O FLAIM registra operações para cada transação de atualização em um arquivo de registro de transações individuais (RFL). Um RFL é usado para recuperar transações de uma falha do sistema ou ao fazer restauração de um backup. O arquivo RFL é truncado após cada ponto de verificação ser concluído, exceto se ativado em (rflkeepfiles) usando um backup dinâmico contínuo.
Para garantir uma utilização eficiente do cache de entrada e obter um desempenho melhorado das operações de pesquisa de atributo, o FLAIM armazena atributos com valores maiores ou com um número maior de valores em uma localização separada, ou seja, o Container de atributos. Você pode transferir um atributo para o Container de atributos se o atributo:
tiver mais de 25 valores
tiver um valor maior do que 2048 bytes
O eDirectory proporciona flexibilidade de programação para a transferência de atributos. Primeiro você deve ver os atributos que estão prontos para ser transferidos e, em seguida, programar as respectivas transferências de acordo com sua conveniência.
Para ver o número de atributos que estão prontos para transferência para o Container de atributos, execute o comando ndscheck. Para ver mais informações sobre os atributos, use o atributo dsReadyContainerAttr do iMonitor nos objetos Pseudo servidor.
Para iniciar a containerização de atributos, use a opção de conserto de objeto único de ndsrepair para o objeto Pseudo servidor. Para containerizar um atributo, emita o comando ndsrepair com o novo switch avançado -am seguido do nome do atributo, conforme mostrado abaixo:
ndsrepair –J <Pseudo server object ID> –Ad –AM/–am <attribute name>
Para habilitar a containerização avançada de atributos, adicione enablemovetoattrcontainer=1 no arquivo _ndsdb.ini e reinicialize o eDirectory.
Após transferir um atributo para o Container de Atributos, o eDirectory cria um índice de sistema com o nome do atributo. Após a containerização de um atributo, não é possível transferi-lo de volta para o container original.