A utilização de ORDA para aceder a tabelas grandes (especialmente aquelas com relações) no modo Cliente/Servidor foi grandemente melhorada. Com 4D v17 R5, verá 2-3xs melhor desempenho LAN e até 30xs mais rápido desempenho WAN. E o melhor de tudo – não há necessidade de alterar nada no seu código, é tudo automático. Interessante, não é? Bem, vamos mergulhar nos detalhes.
Normalmente, ao carregar um registo numa aplicação cliente, todos os campos do registo são transferidos a partir do servidor. Mesmo aqueles que não são necessários. Portanto, o desempenho depende da concepção da sua aplicação, da estrutura da sua base de dados, e das capacidades da rede … especialmente quando se utilizam tabelas grandes com campos múltiplos ou grandes. Por exemplo, numa WAN lenta, utilizando apenas alguns campos em caixas de listagem baseadas na selecção (de tabelas com dezenas de campos com muitas relações/campos e textos/fotografias grandes), a sua aplicação estará em breve fora de serviço.
Os pedidos ORDA utilizavam anteriormente o mesmo princípio de carregamento de campos … até agora! Com v17 R5, o servidor analisa os atributos de que necessita em cada dataclass e identifica os atributos relacionados para que apenas os dados solicitados sejam transferidos entre o servidor e o cliente.
ESTUDO DE CASO
Para ilustrar estas melhorias, vamos utilizar uma base de dados simples:
A tabela do Livro tem 1.000 registos. O seu campo de resumo contém entre 100 e 2.000 caracteres e o seu campo de miniaturas contém cerca de 10KB de imagens. Na tabela de Autor relacionada, o campo da biografia contém 10.000 caracteres em cada registo.
Usando esta base de dados, criámos duas caixas de listagem baseadas na selecção: uma usando uma selecção de entidade ORDA e a outra usando uma selecção clássica. Em cada caixa de listagem, escolhemos exibir o título do livro com o seu autor, a fim de activar relações. Também adicionámos uma acção para percorrer automaticamente a caixa de listagem para que nenhuma acção humana possa perturbar os resultados:
As medidas na tabela abaixo mostram os quadros TCP que foram transmitidos entre o servidor e o cliente (incluindo todas as respostas de reconhecimento) do exemplo no vídeo. A ligação de rede do cliente é do tipo Wi-Fi “802.11ac” (download de 250Mbps, upload de 100Mbps , com atraso de 1ms):
Mode | Frames | Overall size (bytes) | Duração (ms) |
Clássico | 4,070 | 473,924 | 5,747 |
ORDA | 46 | 6,744 | 692 |
Como pode ver, a utilização de ORDA significa que apenas alguns quadros são transferidos! E duração? Quanto mais lenta for a rede, maior será a diferença entre a ORDA e a abordagem clássica.
Um novo conceito: contexto OPTIMIZAÇÃO
Isto permite registar o que o sistema aprendeu, e depois reutilizá-lo mais tarde. Para o fazer, basta criar um objecto opção contendo um atributo“contexto” e depois especificar o valor desejado antes de definir o objecto como parâmetro:
Se (Form.currentContext=Null)
Form .currentContext:=New object("context"; "contextListboxBookAndAuthor")
Terminar se
Form .books:=ds.Book.all(Form.currentContext)
Este objecto de opção pode agora ser utilizado com o Create entity selection e os seguintes métodos de membros: dataClass. query (), entidadeSelecção. query (), dataClass. fromCollection (), e dataClass. all().
N.B: Na tabela de medições, não activámos a característica de contexto para sermos o mais exactos possível.
Para concluir:
A ORDA simplifica os seus desenvolvimentos:
- Acelera a transferência de informação – sem alterações de código.
- Não precisa de mover campos grandes de uma tabela e armazená-los numa tabela relacionada a 1-1 para evitar impactos no modo Cliente/Servidor.
- Quando quiser aceder ao servidor fora da LAN, pode agora ligar directamente o cliente … sem utilizar tecnologias de ambiente de trabalho remoto.