Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Michel Kuguio

Pool de Conexões PDO.

Recommended Posts

Apesar de estarmos falando sobre pool de conexão utilizando pconnect, preciso lhe "falar umas verdades".

 

1º - Não é recomendável o uso de conexões persistentes, evite-as (com ou sem pool, não é recomendável);

2º - Não é só o caso de duplicar a conexão (ou não). Também duplicará as classes, criará redundâncias inúteis e maior consumo de memória;

3º - Ela não é uma conexão. Nesse caso não cabe à herança;

4º - Leia sobre Liskov Substitution Principle.

 

 

A herença (extends) cabe quando uma sub-classe é a super-classe com "algo a mais".

 

O exemplo clássico é de uma pessoa.

- Pessoa é a classe base;

- PessoaFisica e PessoaJuridica são as especializações;

- Ambas são Pessoa (class). Possuem tudo que uma Pessoa possui e mais suas peculiaridades.

 

Um model/ORM/DAO não é uma conexão, somente utiliza uma. Portanto, não cabe à herança.

entendo, eu usei o registre como você falou mas de forma diferente.. tipo...

eu executo a classe conexão e nela coloca o valor na classe registre.

e depois na claque query eu peço para recuperar o valor do registre.

ao inves de fica colocando em cada objeto coloquei direto na classe base de todo o crud das tabelas.

 

você acha que fiz certo?

pq sem ele disponibilizando as variáveis... a aplicação fica mais rápida... mas é mais trabalhosa. ja ele é mais facil. xD.

 

quando a conexao persistente.. aumentou muito a velocidade do site.. mas ela nao encerra as mesma.. tipo sem persistente ele demora mais porem encerra todas. ja com ele é muito rapido porem nao encerra.. =S

 

quanto a explicação de extends antes eu havia feito as seguintes classes..

o sinal -> vaiindicar a a proxia é filha;

conexao->query->crud->tabelaX

conexao->query->crud->tabelaY

 

agora ficou.

Conexao

query->crud->tabelaX

query->crud->tabelaY

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendo, eu usei o registre como você falou mas de forma diferente.. tipo...

eu executo a classe conexão e nela coloca o valor na classe registre.

e depois na claque query eu peço para recuperar o valor do registre.

ao inves de fica colocando em cada objeto coloquei direto na classe base de todo o crud das tabelas.

 

você acha que fiz certo?

De que forma você inclui? Precisaria ver.

 

quando a conexao persistente.. aumentou muito a velocidade do site.. mas ela nao encerra as mesma.. tipo sem persistente ele demora mais porem encerra todas. ja com ele é muito rapido porem nao encerra.. =S

Dependendo da quantidade de conexões com o banco, uma conexão sempre ligada vai te limitar o número de usuários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De que forma você inclui? Precisaria ver.

Mudei, eu estudei o registre e consgui entender como ele funciona.. com isso eu deixei a função de retornar como statica.

 

ficou assim, a classe Conexao cria o Obj PDO.

 

a Classe tabelaUM é extend da classe Crud e tem todas as Querys da tabelaUM.

e a classe Crud é extend da classe Query(que nada mais é q a base para a query).

 

Obs: antes a minha classe Crud funcionava como se fosse um framework, só precisava passar campos e valores e dizer oq que queria q fizer-se q ela fazia automática, mas achei q iria sobrecarregar o server pois a classe tinha muita condição e também gerar trabalho pro server por preguiça de construir as SQL seria burrice. então eu mudei ela e a parte de Select,Update,eu passo o sql manual, o update por ser simples ele construi.. e o Inser ficou top, ele recebe o array e inseri automaticamente e fiz um insert múltiplo que inseri varios dados em um unico sql e exute.

se interessar eu posto ela pra você ver, eu testei e o ganho de desempenho foi bom com esse tipo de insert xD;

 

Dependendo da quantidade de conexões com o banco, uma conexão sempre ligada vai te limitar o número de usuários.

é eu encontrei uma redação sobre conexões persistente e apesar de ser rapida tem esse problema do limite.

 

Cara valeu mesmo por tirar minhas duvidas... sou meio burrinho, mas com a ajuda do pessoal consegui entender melhor sobre POO e Conexões , encontrar e corrigir muitos erros meu nos meus algorítimos!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que esse tópico já está tomando outro rumo que não o de Pool de Conexões.

 

Se concordarem, proponho uma divisão dele.

 

Eu não ia opiniar sobre o assunto porque não entendi direito mas, não seria um caso simples de Registry não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...]não seria um caso simples de Registry não?

Para um único usuário acessando o sistema, sim. Para multi-usuários, não. É basicamente como o pool de impressão. Você envia documentos para imprimir, de diversos computadores, e eles serão impressos na ordem que foram recebidos. O SGBD já não, ele recebe os processos e executa-os em "paralelo", o primeiro que terminar terá seu resultado retornado.

 

Antes de existir o pool de impressão, acontecia as "impressões paralelas", vários arquivos sendo impressos ao mesmo tempo. Uma hora saia uma folha de um arquivo, duas de outro, mais uma do primeiro. O pool foi criado para resolver isso.

 

Em um SGBD, eu vejo como uma "fila" de processos, você vai enfileirando as consultas realizando uma de cada vez. Como o processo é priorizado, sua execução é extremamente rápida. Se existirem muitos processos, são enfileirados e aguardarão sua execução. Isso é processamento em batelada(batch) e é útil, ao meu ver, em sistemas do mesmo tipo(batch), onde não há interação do usuário e o sistema necessita da resposta para continuar o processo. Não vou adentrar sobre os tipos de processamento, pois ai já é outra história.

 

Eu, particularmente, gosto do trabalho paralelo dos SGBDs. "Processamento paralelo" (que não é tão paralelo assim) foi um grande avanço na tecnologia dos SOs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, já clareou um pouco.

 

Eu nunca mexi com isso mas possivelmente o Gearman resolveria esse problema. Tenho poucas informações sobre seu funcionamento mas tudo indica que bastaria adicionar o IP/Nome do Servidor responsável por esse Pool.

 

E ao invés de os clientes executarem as queries diretamente eles enviariam informações para que o pool adicionasse uma tarefa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, já clareou um pouco.

 

Eu nunca mexi com isso mas possivelmente o Gearman resolveria esse problema. Tenho poucas informações sobre seu funcionamento mas tudo indica que bastaria adicionar o IP/Nome do Servidor responsável por esse Pool.

 

E ao invés de os clientes executarem as queries diretamente eles enviariam informações para que o pool adicionasse uma tarefa.

Bom creio que consegui o que queria...

pode fechar o tópico. xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Convém postar como fez não apenas para elucidar os pontos não tão definidos ao longo da discussão como também ajudar àqueles que tiveram, têm ou poderão ter o mesmo problema/necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.