Hibernate - como melhorar o processo?

12 respostas
postgresqljavahibernatebanco-de-dados
P

Boa tarde, senhores. Sou desenvolvedor JAVA e na empresa que trabalho lidamos com FRENTE DE LOJA (PDV)

Ou seja, uma loja possui diversos PDV’S (é como o mercado que você vai comprar e nele tem vários caixas)…

Os dados das vendas são gravados tanto no banco local do PDV, quanto também é persistido no CONCENTRADOR, que é outro sistema que nós temos.

Ou seja, o CONCENTRADOR é um sistema que sempre fica recebendo informações dos PDVS… tem cliente que vai ter até 20 PDV’S numa loja, ou seja, 20 PDV’S alimentando constantemente o banco do Concentrador.

O que tenho percebido é que a conexão com o Concentrador tem ficado cada vez mais lenta, afinal, são vários PDV’s consumindo o banco, fora outros serviços que fazem o mesmo também. O pdv faz conexão JDBC com o concentrador, já o próprio concentrador utiliza o hibernate.

Alguém poderia me explicar melhor sobre LOCK em tabelas? tenho a sensação que as tabelas ficam “travadas”

essa imagem é do banco do cliente, o que esse tanto de tabela representam? será que realmente são tabelas que estão de alguma forma causando conflito?

12 Respostas

P

Gostaria de algumas dicas de boas práticas pra tentar deixar esse banco do concentrador o mais “leve” possível

J

Se nao ta usando fila, passe a usar. Trocaria tambem hibernate por jdbctemplate ou jdbc puro, que sao mais leves.

L

Pela imagem, acho que vc não precisa se preocupar, pois essas são tabelas do postgres e do seu sistema, e esse lock AccessShareLock é adquirido quando um select é realizado (FONTE: 13.3.1. Table-level Locks), ou seja, não está causando lock na tabela (atrapalhando a concorrência), é como se fosse apenas uma marcação pelo que entendi. Mas não sou nenhum perito também, por isso recomendo a leitura do link da fonte que passei.

Tem que ver qual lock está sendo usado no tal concentrador quando os PDVs inserem dados lah.

P

Sobre hibernate, poderia tirar uma dúvida? O concentrador recebem os dados de todos os pdvs justamente para realizar consultas e gerar relatórios… a maioria dos selects sempre utiliza a mesma session. Tenho dúvidas nesse questão de quando criar uma nova sessão ou não

Quando dou close etc… essas questões assim… é tanta coisa que as vezes me perco

J

Cada requisição independente de onde vier deveria ter sua propria session. Só a SessionFactory que deve ser única na aplicação.

L

Como que é a comunicação dos pdvs com o sistema Concentrador?

P

é JDBC…lemos um arquivo de configuração que contém o ip desse “concentrador” na rede… e é feita a conexão dessa forma

L

A conexão dos PDVs é feita diretamente com um banco de dados então? Nâo há qualquer sistema que intermedia o acesso dos PDVs ao banco do Concentrador?

P

não… é direto do pdv para o concentrador…
o que acontece é que existem outros sistemas que utilizam o banco do concentrador também

Existe um sistema que chama toolkit, que é pra fazer correções nas notas fiscais que sobem pra SEFAZ
Aí esse sistema conecta direto com o banco do concentrador também…

A grande verdade é que esse banco do Concentrador é uma loucura, 15,20 PDVS enviando dados simultaneamente + outras aplicações como dito rs

L

Vocês conseguem acompanhar no banco todas as transações ativas durante um momento de pico de utilização? Para ter uma ideia melhor do cenário.

Talvez, uma solução seria os PDVs inserirem os registros no concentrador em lote em vez de um por um, mas teria que avaliar o impacto.

J

Ao invés dos PDV’s se comunicarem diretamente com o concentrador uma ideia legal seria os mesmos jogarem os dados em uma fila, e uma API consumiria estes dados e os jogaria na base do concentrador, com isso já diminuiria consideravelmente a quantidade de acessos feitos diretamente na base.

P

É uma boa dica ein… o que realmente atrapalha é AO vivo, o concentrador receber vários dados de VÁRIOS PDVS… eu tendo uma forma de fazer PDV por PDV é bem melhor.

Criado 30 de abril de 2020
Ultima resposta 30 de abr. de 2020
Respostas 12
Participantes 4