[Cascavel-pm] Perl e Oracle
Luis Campos de Carvalho
lechamps em terra.com.br
Sexta Setembro 5 12:31:01 CDT 2003
Alceu R. de Freitas Jr. wrote:
> --- Luis escreveu: >
[ Estranho gosto da empresa pelo D3... ]
> Ah, eu não vou iniciar uma flamewar na lista sobre
> bancos de dados. :-)
Obrigado, eu te devo esta.
Meu sonho de consumo é trabalhar com Perl e Oracle em um grande
projeto... quem sabe um dia? =-]
> Com certeza estou falando sobre o ítem 2: estou
> carregando dados de sistemas distintos de/para. Às
> vezes consigo usar XML (o que é uma boa) mas a maior
> parte fica por arquivos texto.
Opa! Desculpe!
Acho que quem não se expressou corretamente fui eu!
O (2) do primeiro email (consultem o arquivo da lista, mongers!) faz
referência a informações obtidas dinamicamente, uma a uma, normalmente
de fontes de dados distintas e humanas. Um bom exemplo é um artigo ou
mensagem postada para um web-board, ou um registro de um usuario para um
sistema de intranet ou bugtrack...
Você está falando de carga de dados em batch, ou está falando de
cadastramento de registros um-a-um, por humanos ou algo parecido?
Dica: o Oracle tem ferramentas (data-loader) insuperáveis em
velocidade para carregar dados em batch. O Data Loader grava diretamente
no arquivo de dados, sem solicitar ajuda do RDBMS. Isso economiza o
tempo de armazenamento das operações de inserção de dados no Redo-Log, o
que torna este método imbatível...
> Li em algum lugar que as procedures do Oracle são
> guardadas em memória. Ou seja, são lidas e compiladas
> uma vez, depois ficam lá esperando serem chamadas de
> novo. Se isso ocorre mesmo, fica complicado para o
> Perl ganhar em velocidade.
Possivelmente no manual da Oracle.
Não é completamente mentira, mas certamente não é toda a verdade.
Stored procedures normalmente estão em disco, como texto
(source-code). Elas sobem para a memória, são compiladas, catalogadas no
cache de disco em uma área de memória partilhada chamada "Library
Cache", onde o Oracle guarda todo o tipo de código PL/SQL depois de
compilado. O que o pessoal não menciona muito é que esta área é pequena,
proporcionalmente ao tamanho e quantidade de procedures normalmente
armazenadas. É a campeã de falhas de cache ("cache page miss" -- quando
o que você procura não está mais em cache) do RDBMS Oracle.
Um outro aspecto: o Perl tem custo de startup fixo: você roda uma vez
e pronto, o programa está funcionando (e vai fazer carga de todos os
registros que você apresentar para esta sessão). O Oracle reinicia um
stored procedure (e paga os custos de start-up) a cada nova chamada.
Isso acumula muito mais custos para o Oracle, sem dúvida.
> Estou pensando em sugestionar uso de Perl em lugar de
> procedures mais complexas, uma vez que é bem mais
> simples utilizar Perl para controlar dados, gerar
> logs, etc...
Eu acho que isso vai depender muito da forma como seus dados estão:
São confiáveis? Vêm em pacotes de milhares de registros? São puros?
Existem registros com problemas / sujos? Que tipo de informações de log
você precisa? Isso está dentro do banco de dados?
Você pode sugerir ao pessoal que <code>use Perl;</code>, mas acho que
a possibilidade de utilizar um mecanismo de carga de dados da Oracle
pode ser mais atraente...
> Esclareci um pouco melhor agora?
=-] Estamos chegando lá.
Eu espero ter sido claro também.
[]'z!
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Luis Campos de Carvalho is Computer Scientist,
PerlMonk [SiteDocClan], Cascavel-pm Moderator,
Unix Sys Admin && Certified Oracle DBA
http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Mais detalhes sobre a lista de discussão Cascavel-pm