none
Design e modelagem para disponibilidade e velocidade em consultas RRS feed

  • Pergunta

  • Boa tarde Srs!

     

    Tenho alguma experiência em design e modelagem de sistemas tradicionais (cadastros, relatórios, etc) e agora minha equipe tem o desafio de construir um e-commerce. Precisamos desenvolver um sistema capaz de suportar mais de 100 mil usuários por dia efetuando busca, ordenacao e filtros em mais de 3 milhões de registros com diversos relacionamentos.

     

    Trocando algumas experiências com alguns colegas conseguimos chegar a conclusão de que vai ser necessário construir uma base desnormalizada a parte, e através de um processo de ETL ou alguma coisa parecida para desnormalizar os dados sendo assim possível efetuar queries mais eficientes e com maior disponibilidade.

     

    No entanto, não tenho nenhuma experiência nesse processo e não consegui achar nenhuma referência útil de como fazer.

     

    Conto com a ajuda dos amigos mais experientes! Big Smile

     

    Muito obrigado a todos!

    quarta-feira, 16 de abril de 2008 16:40

Respostas

  • Boa noite Antonio,

     

    Vamos por partes.

    Você quer usar ETL pra que? Para transferir os dados da sua base transacional normalizada para um DW ou algo do tipo?

    É muito importante também definir a arquitetura transacional do sistema. De uma olhada no padrão Unit Of Work (http://martinfowler.com/eaaCatalog/unitOfWork.html) para melhor controle (e performance) das transações.

     

    Também seria bom pensar na divisão física de camadas para fazer o scale up da aplicação. Que arquitetura está pensando em utilizar? Arquitetura anemica? DDD? Sugiro dar uma olhada em Domain-Driven Design e arquiteturas data-centric. (Particularmente sou mto fã do DDD, mas outras arquiteturas devem ser cogitadas).

     

    Quanto ao DW, talvez vc consiga o mesmo efeito usando clustered views. É uma alternativa tranqüila de implementar e que ajuda bastante.

     

    Espero suas respostas para continuarmos a conversa. Stick out tongue

     

    Atenciosamente,

    André Azevedo

    quinta-feira, 17 de abril de 2008 03:41
  • Bom dia Antonio,

    Gostaria de questionar algumas coisas... você está construindo um e-commerce "do zero"? sem o apoio de algum produto de mercado (ex: Microsoft Commerce Server)?

    Caso seja do zero, puramente em .Net, sugiro você verificar o Microsoft Commerce Server o qual é um produto muito bom. O mesmo trata uma série de problemas comuns e mitiga diversos riscos em projetos de e-commerce. Eu particulamente já participei de dois projetos de e-commerce utilizando este produto e o mesmo agregou muito. Ele trata diversos aspectos, inclusive diversas formas de realizar uma busca em produto.

    Microsoft Commerce Server 2007
    - http://www.microsoft.com/brasil/servidores/commerceserver/default.mspx


    []'s,
    Denis Oliveira.
    sexta-feira, 18 de abril de 2008 14:04

Todas as Respostas

  • Boa noite Antonio,

     

    Vamos por partes.

    Você quer usar ETL pra que? Para transferir os dados da sua base transacional normalizada para um DW ou algo do tipo?

    É muito importante também definir a arquitetura transacional do sistema. De uma olhada no padrão Unit Of Work (http://martinfowler.com/eaaCatalog/unitOfWork.html) para melhor controle (e performance) das transações.

     

    Também seria bom pensar na divisão física de camadas para fazer o scale up da aplicação. Que arquitetura está pensando em utilizar? Arquitetura anemica? DDD? Sugiro dar uma olhada em Domain-Driven Design e arquiteturas data-centric. (Particularmente sou mto fã do DDD, mas outras arquiteturas devem ser cogitadas).

     

    Quanto ao DW, talvez vc consiga o mesmo efeito usando clustered views. É uma alternativa tranqüila de implementar e que ajuda bastante.

     

    Espero suas respostas para continuarmos a conversa. Stick out tongue

     

    Atenciosamente,

    André Azevedo

    quinta-feira, 17 de abril de 2008 03:41
  • Bom dia Antonio,

    Gostaria de questionar algumas coisas... você está construindo um e-commerce "do zero"? sem o apoio de algum produto de mercado (ex: Microsoft Commerce Server)?

    Caso seja do zero, puramente em .Net, sugiro você verificar o Microsoft Commerce Server o qual é um produto muito bom. O mesmo trata uma série de problemas comuns e mitiga diversos riscos em projetos de e-commerce. Eu particulamente já participei de dois projetos de e-commerce utilizando este produto e o mesmo agregou muito. Ele trata diversos aspectos, inclusive diversas formas de realizar uma busca em produto.

    Microsoft Commerce Server 2007
    - http://www.microsoft.com/brasil/servidores/commerceserver/default.mspx


    []'s,
    Denis Oliveira.
    sexta-feira, 18 de abril de 2008 14:04
  •  

    Boa tarde Srs!

     

    Obrigado pelas respostas até então.

     

    Minha equipe está trabalhando na re-construção e re-formulação do e-commerce de uma grande rede varejista aqui e fora do Brasil. Hoje eles trabalham com cerca de 150 mil produtos, mas após o projeto a idéia é trabalhar com mais de 3 milhões de produtos importados e nacionais.

     

    Em questão de arquitetura estamos trabalhando com DDD + DTO/Facade + WCF pra resolver a questão das camadas físicas.

     

    Estamos começando do zero sim. Na minha visão e na deles, trabalhar desta forma custa mais caro (tempo em desenvolvimento), mas a longo prazo traz diversas vantagens .

     

    Como não tenho experiência com sistemas de alta disponibilidade e alta performance em consultas inicialmente imaginei que seria necessário trabalhar com um banco normalizado para os aspectos transacionais e de controle interno (ERP próprio) e para o site desnormalizar o banco e trabalhar com os dados através de processos de ETL.

     

    No entanto, depois de alguma pesquisa estou direcionando meus esforços para estudar características do SQL 2005 que possam me ajudar com isso (materialized views, cache e notification services) e cache de aplicação. Também estou verificando a possibilidade de utilizar o cache do próprio asp.net para ajudar nessa tarefa. Dessa maneira eu não precisaria desnormalizar meu banco de dados e ainda assim teria um desempenho aceitavel.

     

    Eu acredito que seguindo nessa linha vamos conseguir alcançar nosso objetivo.

     

    O que vocês acham?

     

    Obrigado novamente!

    sexta-feira, 18 de abril de 2008 20:18
  •  Antonio Filho wrote:

    Em questão de arquitetura estamos trabalhando com DDD + DTO/Facade + WCF pra resolver a questão das camadas físicas.

     

    Não entendi, Antonio. As camadas rodam em servidores distintos?

     

    []s

    terça-feira, 22 de abril de 2008 00:49
  •  Laércio Queiroz wrote:
     Antonio Filho wrote:

    Em questão de arquitetura estamos trabalhando com DDD + DTO/Facade + WCF pra resolver a questão das camadas físicas.

     

    Não entendi, Antonio. As camadas rodam em servidores distintos?

     

    []s

     

    Sim. O sistema está distribuido fisicamente, pois além do e-commerce existe também toda a parte interna de controle de produtos, frete, logística, etc. Enfim, internamente é um ERP.

     

    Este ERP será o responsável por cadastrar e manter os insumos para o site.

    terça-feira, 22 de abril de 2008 16:24