2.1 Banco de dados do FLAIM

O eDirectory usa o FLAIM como seu banco de dados. O FLAIM (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 a partir 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 de blocos. Ao obter um bloco do disco, o FLAIM verifica primeiramente os blocos no cache. Se o bloco existir, não é necessário realizar uma leitura de operação 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 Checkpoint

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 outra 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 uma 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), ela será forçada e o cache modificado será apagado.

  • Se o tamanho do cache modificado for maior do que maxdirtycache (se definido), um ponto de verificação é forçado a abaixar 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 de blocos. Qualquer alteração nos atributos indexados exigirá alterar os blocos do índice.

O eDirectory define um conjunto padrão de índices para atributos do sistema (campos). Atributos do sistema tais 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 excluídos. O diretório os utiliza internamente. Os índices padrão são definidos para atributos tais 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 "Descrição= Isto é para teste", 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 a partir 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.