Meu projeto para a Rinha de Backend usando Vlang (Passo a passo, dicas, procedure, infra, etc.)

Sdílet
Vložit
  • čas přidán 15. 07. 2024
  • Fala galera, como prometido, aqui está o repositório do meu projeto para estudar a linguagem V:
    github.com/marcoagpegoraro/ri...
    Também vou deixar o repositório da rinha de backend mostrando o passo a passo de como fazer a entrega, lembrando que o tempo para entrega dos projetos vai até dia 10/03/2024:
    github.com/zanfranceschi/rinh...
    Como este canal está no inicio, ele não possúi monetização ainda, mas caso queira me ajudar com um pix de qualquer valor, vou estar deixando essa chave pix aqui: c827a9ac-26cf-4740-b486-6445b8feba18
    Um abraço a todos, e boa sorte caso queira participar também!
    Alguns links relevantes:
    vlang.io
    github.com/vlang/v/blob/maste...
    modules.vlang.io/vweb.html
    modules.vlang.io/db.pg.html
    modules.vlang.io/orm.html
    ERRATAS:
    1. No momento que falo do mapeamento da lista de models.Transacao para dtos.TransacaoDto, analisando melhor, é bem fácil de entender a função, você passa dentro dos colchetes a structure que você tem e qual structure você quer mapear, em seguida, você passa como argumento da função a lista e uma função que vai receber o index e a structure da lista, por fim você declara que a função vai retornar a structure desejada, e dentro você faz o mapeamento.
    2. Eu falo no vídeo que criei uma Stored Procedure, mas na verdade eu criei uma Stored Function, uma stored procedure não consegue retornar valor igual eu fiz, mas as functions conseguem.
    3. Também fiz algumas modificações depois do vídeo, os indices que estavam com o mesmo nome, agora estão com o nome diferente, e fazendo o indice pelas variaveis corretas.
    4. Dentro da stored function, no final do SELECT, coloquei o FOR UPDATE, com isso, a linha é travada e não é liberada até ter o COMMIT da transação, resolvendo definitivamente os problemas de concorrencia ao atualizar o saldo.
    5. Por que não estou utilizando network mode host? Na ultima rinha de backend, foi visto que um dos grandes gargalos era por conta da infra do docker rodando em modo bridge, então muitos participantes da atual rinha fizeram o Docker Compose rodar em modo host, mas eu decidi ficar no modo bridge mesmo sabendo que o desempenho seria pior. Fiz isso por alguns motivos:
    5.1. O readme da rinha fala que o modo bridge já deve ser adequado a carga do teste.
    5.2. Quero que pessoas que estejam no Windows e macOS consigam rodar meu docker compose sem precisar fazer nenhum tipo de gambiarra.
    6. Modifiquei a estrutura do meu projeto, descobri que tem como deixar o código em uma pasta src, e os modulos dentro de pastas também, igual no Go, então fiz isso para deixar mais organizado e o a imagem docker com uns megabytes a menos pois agora não precisa mandar o projeto inteiro para dentro da imagem, só a pasta src.
    7. Estou criando as tabelas como UNLOGGED TABLE no postgres, a performance aumentou drasticamente, realmente acho que era a ultima peça que estava faltando para minha aplicação atingir os sub 10ms para o 75 pct no gattling. Nesse artigo você encontra mais informações sobre esse tipo de tabela e os prós e contras: www.crunchydata.com/blog/post....
    8. Como apontado pelo @FlyingVforVendetta, existe uma extensão melhor para usar no vscode para quem programa em V chamada "v-analyzer".
    9. Como apontado pelo @greidinger-reis, a minha foreign key de cliente para transação está configurada incorretamente, pegando pelo "id" e não "id_cliente", e é possível fazer transaction no V utilizando o app.db.exec('BEGIN')! e app.db.exec('COMMIT')!.
    Minhas redes sociais:
    Blog: marcoagpegoraro.com.br
    Portfolio: marcoagpegoraro.github.io
    LinkedIn: / marco-antonio-goncalves
    GitHub: github.com/marcoagpegoraro
    Medium: / tete5423
    Timestamps do vídeo:
    0:00 - Introdução
    1:54 - Falando sobre a rinha
    7:19 - A linguagem de programação V
    8:17 - Documentação do Vlang
    9:00 - Standart library
    9:57 - Meu código
    10:50 - Arquivo main
    12:40 - Models do banco de dados
    13:45 - DTOs
    14:00 - Controller de cliente
    14:30 - Get extrato do cliente
    17:47 - Post transação
    19:38 - Por que usei uma stored procedure?
    21:00 - Mostrando a procedure
    24:10 - Retorno da procedure
    25:17 - Continuando a request
    26:13 - Dockerfile
    27:50 - Docker Compose
    30:17 - Testando a aplicação
    31:34 - Enviando para o repo da rinha
    31:50 - Participem da rinha!
    32:21 - O resultado do stress test do Gatling
  • Zábava

Komentáře • 15

  • @vitormelo22
    @vitormelo22 Před 2 měsíci

    Parabéns, vlang é realmente uma linguagem com excelentes ideias, gosto muito da sintaxe dela, torço para ser mais reconhecida no futuro.
    O site de documentação é um dos melhores que já vi. Muito organizado e com exemplos de uso.

  • @hitalodejesus5206
    @hitalodejesus5206 Před 4 měsíci +1

    Abri alguns PRs no seu repositório

  • @FlyingVforVendetta
    @FlyingVforVendetta Před 4 měsíci +4

    A extensão "v-analyzer" utiliza o language server oficial da linguagem, linkado no repositório da linguagem, inclusive, na seção "Editor/IDE plugins". Instala que fica muito melhor!

    • @marcoagpegoraro
      @marcoagpegoraro  Před 4 měsíci +2

      Caraca, obrigado pela dica, com certeza teria economizado um bom tempo no projeto, V pra mim se tornou uma linguagem mais interessante ainda!

  • @amymaclardnogueira5362
    @amymaclardnogueira5362 Před 5 měsíci +4

    V é uma linguagem mto interessante!
    Ótimo vídeo parabéns.

    • @marcoagpegoraro
      @marcoagpegoraro  Před 5 měsíci +2

      É muito interessante!! Como é uma linguagem bem recente, a gente já espera uma certa limitação em documentação, projetos para se basear e suporte no editor de código, mas mesmo assim acho que é uma linguagem que tem muito potencial se continuar crescendo no ritmo que está

  • @TheMathues123
    @TheMathues123 Před 4 měsíci +1

    Mano gostei muito do vídeo, faça mais videos explorando coisas novas, é muito interessante ver a explicação e aprender com você.

    • @marcoagpegoraro
      @marcoagpegoraro  Před 4 měsíci

      Opa muito obrigado pelo feedback!! com certeza vou fazer mais vídeos sobre programação.

  • @joaovds
    @joaovds Před 4 měsíci +1

    Show demais!

  • @artu_almeida
    @artu_almeida Před 2 měsíci

    nossa consulta de extrato ficou bem parecida mas eu usei LEFT JOIN e subquery invés de executar as duas queries separadas igual você fez

  • @hackshiftBR
    @hackshiftBR Před 5 měsíci +2

    Brabo

  • @JPMoura_
    @JPMoura_ Před 5 měsíci +1

    Mano to desde ontem tomando erro de conexão e estourando memória dos app porque não tinha visto que era pra retornar apenas as 10 ultimas transações. Eu tava retornando todas🔥🫠🔥
    Vc me deu uma nova esperança kkkkk

    • @marcoagpegoraro
      @marcoagpegoraro  Před 5 měsíci +2

      hahauhushusa que bom que consegui ajudar em algo, continua tentando que uma hora vai