Introdução
c-Tree Local
API de acesso a estes arquivos não é publicada por razões de segurança, e não é
possível chamar diretamente a API de dentro de User Functions.
Não deve ser usada para ambientes com mais de um Application Server
acessando o mesmo diretório raiz de ambiente (rootpath), como por exemplo
em balanceamento de carga. Caso mais de um Application Server acesse o
mesmo RootPath, é necessário utilizar um c-Tree Server.
c-Tree Server
Como era possível pintar e bordar com um DBF, o Application Server verifica se
existe procedimento automático para recuperar a tabela para ela ser aberta
novamente. Se houve mudança de diretório, os índices permanentes do header
são excluídos e os paths internos são ajustados. Se apenas algum índice
permanente não foi encontrado, mas não houve mudança no path, os índices
que faltam são recriados automaticamente. Caso a tabela apresente alguma
inconsistência de abertura, como um fechamento inesperado, o Protheus
solicita um rebuild da tabela ao c-Tree.
Questões de Desempenho
https://siga0984.wordpress.com/2015/10/25/acesso-a-dados-advpl-com-c-tree-parte-01/ 3/8
03/11/2017 Acesso a Dados AdvPL com c-Tree – Parte 01 | Tudo em AdvPL
Este cenário fica muito pior quando utilizamos o c-Tree Server pela rede, pois
quanto o Application Server e o c-Tree Server estão na mesma máquina, eles
estabelecem uma conexão TCP por “loopback”, sem efetivamente usar a
interface de rede. Quando colocamos um serviço slave do Protheus em outra
máquina, cada I/O realizado para, por exemplo, ler um próximo registro da
tabela, é enviado pela rede física em um pequeno pacote TCP, e por mais rápido
que seja o seu retorno, a camada de comunicação física pode interferir no
desempenho de uma sequência de milhares de requisições em até 8 vezes. A
natureza das operações é altamente sensível a latência de rede.
escalar esta máquina verticalmente não é viável, e mais cedo ou mais tarde você
vai esbarrar em um limite físico. A sua super-máquina teria que ter várias
placas de rede para evitar contenção, muitos cores, e uma placa mãe com
barramentos “sinistros” pra aproveitar o que for possível de paralelismo…
Muita atenção neste ponto: Não é a banda de rede que torna-se o gargalo, mas
sim a quantidade de IOs, o enfileiramento dos pacotes para transmissão e
recepção atinge um limite físico. Mesmo que a sua banda de rede suporte 1 GB
por segundo, e o consumo de banda chega a menos de 20% deste valor, a
quantidade de pacotes é tão grande que a rede não dá conta dos eventos e
começa a “enfileirar”.
Agora, imagine que este Application Server possa ser iniciado usando a DLL do
c-Tree Server (BoundServer), e você configure no INI deste Application Server
quais serão os arquivos do seu ambiente que serão cacheados na memória, e
este cache possui um mecanismo de notificação de alterações de dados, para
manter todos os nós sincronizados caso algum processo de algum slave faça
alguma alteração em um registro de uma tabela no c-Tree SErver que esteja em
cache em um ou mais nós ? Isto seria lindo, pois todas as leituras seriam feitas
diretamente da cópia da tabela feita em memória no Ctree BoundServer que o
Application Server carregou … Escalabilidade horizontal “plena”, pode enfiar nó
nesse cluster, que uma vez que o cache esteja carregado, tudo é lido da
memória.
Não. Como o c-Tree Server também vai ser usado como o driver para a criação
de arquivos locais de trabalho, que por default são criados dentro da pasta
‘\system\’ do diretório raiz do ambiente (rootpath), todos os IOs de leitura e
gravação ainda passam pela rede … Por isso, também na Build 7.00.121227, foi
criado um novo driver, chamado “CTREETMP”, encapsulado pelas funções
FWOpenTemp() e FwCloseTemp(), para permitir criar um arquivo temporário
“puro”, aberto e acessado exclusivamente pelo processo que o criou em modo
exclusivo, e que é criado na pasta temporária do servidor onde o Application
Server está sendo executado, carregando para isso em memória uma instância
do c-Tree BoundServer, e criando uma tabela sem nenhum controle de
transacionamento. Com isso, todos os IOs feitos para esta tabela temporária
serão tão ou mais rápidos que um c-Tree “local”.
E, o que eu preciso ?
https://siga0984.wordpress.com/2015/10/25/acesso-a-dados-advpl-com-c-tree-parte-01/ 7/8
03/11/2017 Acesso a Dados AdvPL com c-Tree – Parte 01 | Tudo em AdvPL
Conclusão
Como o assunto é extenso e cheio de detalhes, este post foi só para “abrir” o
apetite. A documentação oficial do recurso de cache de dicionários em memória
foi recentemente disponibilizada na TDN, veja os links de referência do post no
final do artigo !
Referências
Documentação da TDN
https://siga0984.wordpress.com/2015/10/25/acesso-a-dados-advpl-com-c-tree-parte-01/ 8/8