Entity Framework 5 (Internals)

Neste post gostaria de descrever alguns procedimentos importantes para execução de queries via Entity Framework 5. Acredito que a explicação do funcionamento e da existência destes procedimentos pode ajudar na resolução de cenários mais avançados e no entendimento do funcionamento do Entity Framework.

Unicorn-Sugar-Skull

Cold e Warm Queries

A primeira vez que uma query é executada, o Entity Framework executa muito trabalho para carregar e validar o modelo de dados utilizado.

Essa primeira query é chamada de "Cold query" (consulta fria), pois ela ainda não validou e carregou dados do modelo. Quando esta query é executada novamente, então ela é chamada de "warm query" (consulta morna), que faz proveito dos dados do modelo carregados e validados da primeira query, tornando sua execução mais rápida – isso justifica parte da impressão de que “a segunda execução sempre é mais rápida”.

Existem alguns componentes importantes na compilação das queries, tal como a criação de Mapping Views.

Mapping Views, View Generation e Plans Compilers

Mapping Views são representações executáveis utilizadas para: execução de queries (query view), adequa o modelo do banco de dados ao modelo conceitual e execução de updates (update view), adequa o modelo conceitual ao modelo do banco de dados.

O processo de criação destas views é chamado de View Generation. Sempre que uma view é criada também é validada (modelo conceitual e banco de dados), a fim de garantir sua integridade entre os dois modelos, assegurando que o relacionamento e a cardinalidade entre as entidades realmente faz sentido.

Quando uma consulta é feita sobre uma entidade, a consulta é combinada com sua respectiva query view. O resultado desta combinação é então executado pelo Plan Compiler, para criar uma representação que a fonte de dados possa entender. Diferentes fontes de dados possuem resultados diferentes em seus Plan Compilers. Por exemplo, para o SQL Server o resultado final do Plan Compiler será código T-SQL.

A figura abaixo descreve o processo de compilação e execução de consultas em bancos de dados por meio da engine do Entity Framework.

clip_image002

O desempenho da criação de views depende da quantidade de relacionamentos, tamanho do modelo e a complexidade do modelo.

Cache

Diferentes usos de cache são adotados no Entity Framework, alguns deles são:

Object Caching é um cache de primeiro nível que mantém embutido no ObjectContext instâncias dos objetos retornados em consultas. Este cache é existente apenas no nível do ObjectContext.

O Query Plan Caching armazena comandos (gerados pelo Plan Compiler) que são executados mais de uma vez. A primeira vez que uma query é executada, ela passa pelo Plan Compiler para que crie uma representação que a fonte de dados possa interpretar. Com o Query Plan Caching, a próxima vez que a query for executada ela não passará pelo Plan Compiler, apenas buscará os dados no Query Plan Caching, reaproveitando processamento e evitando a reexecução do Plan Compiler. Este cache existe em nível de AppDomain, isto significa que a cada conexão aberta e/ou ObjectContext (ou DbContext) criado, este cache será único, pois sua existência esta associada a vida útil do AppDomain da aplicação.

Metadata Caching é muito importante, pois mantêm em memória os tipos de dados do modelo e informações do mapeamento entre o modelo conceitual e o modelo do banco de dados. Este também é um cache em nível de AppDomain.

A figura abaixo descreve o processo de compilação e execução de consultas em bancos de dados por meio da engine do Entity Framework fazendo uso dos recursos de cache.

clip_image004

Espero que este post seja útil para o entendimento do funcionamento interno do EF.

Obrigado e bons estudos!

Por
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft Most Valuable Professional – Visual C#

Referências:
http://msdn.microsoft.com/en-us/data/hh949853.aspx
http://www.devproconnections.com/article/entity-framework/entity-framework-5-143875
Programming Entity Framework – Julia Lerman
Programming Entity Framework DbContext – Julia Lerman & Rowan Miller
LINQ – Pocket Reference – Ben Albahari & Joseph Albahari

Agradecimentos:
@MaiconFGuerra e @MayogaX pela leitura e opinião sobre o texto. Obrigado!

Sobre estes anúncios

5 Responses to Entity Framework 5 (Internals)

  1. Eduardo Pires disse:

    Isso não é mais do mesmo, isso é informação de alto nível :D
    Excelente explicação!
    Abraço!

  2. Diego Lewis disse:

    otimo documento ……….. bem detalhado e facil de se entender !!!!!! mais uma vez parabens Fernando…….

  3. Pingback: Entity Framework – Melhores práticas em busca de performance | Fernando Henrique Ferreira

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 66 outros seguidores

%d blogueiros gostam disto: