[SP-pm] DBIx::Class

Alceu R. de Freitas Jr. glasswalk3r at yahoo.com.br
Sat Sep 14 20:35:40 PDT 2013


Solli,

Recentemente comecei a fazer alguns testes com TryCatch e até o momento me pareceu bastante satisfatório, mas você pode se pegar criando várias classes de exceção.

Se você quiser ser realmente eficiente com o banco, acho que vai ter que abandonar o DBIx::Class: se você criar uma stored procedure no banco de dados você pode criar uma função de "upsert" (atualiza se existe, insere se não) sem ter que retornar dados para a camada do DBIx::Class e da sua aplicação e poderá capturar a exceção com precisão no banco (dependendo do banco que você for utilizar, claro).

Ou então fazer um esquema de cache experto (Memcached?) para os registros já inseridos no banco, isso tornaria a coisa toda mais eficiente.

De qualquer forma, o DBI tem o método err() (http://search.cpan.org/~timb/DBI-1.628/DBI.pm#err) para retornar um código numérico... claro que você teria que criar de antemão uma tabela com os códigos de cada banco de dados que você quer que sua aplicação suporte. Como DBIx::Class usa DBI, talvez você consiga ter esta mesma informação.

Os drivers JDBC tem essas mensagens de erros todas padronizadas? Eu não sabia disto.

[]'s


Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r at yahoo.com.br
---
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1



>________________________________
> De: Solli Honorio <shonorio at gmail.com>
>Para: "saopaulo-pm at mail.pm.org" <saopaulo-pm at mail.pm.org> 
>Enviadas: Sábado, 14 de Setembro de 2013 19:50
>Assunto: Re: [SP-pm] DBIx::Class
> 
>
>
>Bom, descobri um motivo para não utilizar a abordagem que eu estava imaginando. 
>
>
>O perl não possui um sistema de Exception decente, e o DBIx::Class também não faz nada muito avançado neste sentido. Atualmente o DBIx::Class gera um exception simplório através do DBIx::Class::Exception, que não tem nenhuma maneira simples de identificar o motivo do erro.
>
>
>Na solução atual eu preciso parsear o mensagem de string, mas isto tem um problema. Cada banco de dados pode gerar uma mensagem diferente para o mesmo problema (neste caso colisão de índice único) e aí eu preciso criar uma enorme estrutura de parser para atender todos os bancos, ou pelo menos a maioria (ah, que inveja do Java !!!).
>
>
>Ou seja, é melhor ser educado e fazer as perguntas corretas ao banco :D !!
>
>
>Abraços,
>
>
>Solli Honorio
>
>
>
>Em 14 de setembro de 2013 15:22, Lucas Mateus <lucasmateus.oliveira at gmail.com> escreveu:
>
>
>>        Boa pergunta André. É um teste simples de fazer, que acha de fazer em seu SGBD preferido e nos dizer ?
>>
>>
>>
>>Em 14/09/2013, às 14:39, André Walker <andre at andrewalker.net> escreveu:
>>
>>
>>> On Sat, Sep 14, 2013 at 12:44:35PM -0300, Lucas Mateus wrote:
>>>> Para tornar esse processo mais rápido eu crio um campo do tipo binary 16
>>>> bytes e gravo o md5 (binario sem hexadecimal) do email e utilizo ele para
>>>> consulta.
>>>> Algo assim: select id from users where email_md5 = md5('fulano at bla') and email = 'fulano at bla';
>>>> Onde somente o campo email_md5 tem index e você tem certeza que ele sempre
>>>> terá 16 bytes, se você tiver 1 milhão de usuários essa consulta terá um
>>>> custo risório. A segunda comparação é somente para evitar colisões de md5 e
>>>> o index é feito somente no campo email_md5.
>>>
>>> Será que isso é realmente necessário? Quer dizer... qual o problema de ter um
>>> índice no campo email mesmo? De qualquer forma, você já vai ter um custo
>>> computacional na função md5 (ainda que pequeno), e tenho a impressão que
>>> índices em campos texto não são tão ruins assim. Talvez varie de SGBD pra
>>> SGBD? Em PostgreSQL, por exemplo, seria relevante ter essa coluna email_md5?
>>>
>>> Att.
>>> André
>>>
>>> =begin disclaimer
>>>  Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>
>>=begin disclaimer
>>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>=end disclaimer
>>
>
>
>
>-- 
>"o animal satisfeito dorme". - Guimarães Rosa 
>=begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>=end disclaimer
>
>
> 


More information about the SaoPaulo-pm mailing list