2.1 Banco de dados do FLAIM

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.

2.1.1 Ponto de verificação

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.

2.1.2 Índices

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

2.1.3 Registro de transações individuais

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.

2.1.4 Containerização do atributo FLAIM

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.