Java vs pl/sql (rapidez na rotina de inserts/updates)

Pessoal,

Estou fazendo uma rotina para preencher algumas tabelas com dados de outras tabelas (de bancos diferentes). E gostaria de saber se o java (jdbc puro) ficara muito mais lento que um script pl/sql. Lembrando que existem loops dentro de loops nessa rotina.

Teoricamente sim.

Mas nem sempre, tem até um artigo aqui no GUJ que retrata um caso desses onde o java foi mais rápido.

Teria que analisar com mais calma para poder ter certeza.

Os dois “bancos” que vc diz representam dois bancos mesmo? Ou dois usuários diferentes ?
Dois bancos em mesma máquina, ou maquina remota ?

Tudo depende, tem até estratégias para poder relacionar tabelas de diferentes bancos remotos com maior performance.

[quote=nbluis]Teoricamente sim.

Mas nem sempre, tem até um artigo aqui no GUJ que retrata um caso desses onde o java foi mais rápido.

Teria que analisar com mais calma para poder ter certeza.

Os dois “bancos” que vc diz representam dois bancos mesmo? Ou dois usuários diferentes ?
Dois bancos em mesma máquina, ou maquina remota ?

Tudo depende, tem até estratégias para poder relacionar tabelas de diferentes bancos remotos com maior performance.[/quote]

são 2 bancos diferentes…o de origem e o de destino…estou fazendo alguns testes e ele esta demorando bem mais que um script pl/sql…e estou usando somente DAO e jdbc puro. Eu já verifiquei e não estou instanciando classes desnecessáriamente. A parte onde demora muito é onde tem um loop dentro de outro loop, q por sua vez, tem outro loop dentro. O estranho é que no pl/sql não demora muito para fazer a mesma lógica.

Ola,

Muitas vezes, de acordo com as maquinas fisicas, o job pl/sql fica mais rapido prq ele evita comunicação via socket entre a rede. Já que este estara na mesma maquina do banco de dados.

Na verdade a criação de um, dois três objetos a mais não não ter qualquer diferença significativa para seu processo.

O que conta realmente é a quantidade de I/O executada tanto no processo de busca nos bancos de dados (busca feito em disco físico pelo oracle - dados que não estão em memória), quanto no transporte de dados entre o banco e o cliente.
O oracle tentará ao máximo diminuir esses I/Os em um pl/sql, enquanto em um processo java isso é ditado pelo desenvolvedor.

[quote=ovelha]Ola,

Muitas vezes, de acordo com as maquinas fisicas, o job pl/sql fica mais rapido prq ele evita comunicação via socket entre a rede. Já que este estara na mesma maquina do banco de dados.[/quote]

Acho que talvez seja isso, pois estou na minha máquina testanto através de um conexão via nat e talvez pelo pl/sql seja mais inteligente nesse sentido.

Aqui, em um das maiores companias de telecom do Brasil, o pl/sql é nosso padrão de desenvolvimento para jobs do tipo ETL, justamente por já estar comprovado a diferença de performance pela comunicação via socket. Obviamente o comentario do nbluis é bem valido, pois otimizações utilizando as funções use_order, use_hash do oracle são sempre bem vindas, ou mesmo a troca de possições das clausulas where pode aumentar consideravelmente a performance, pois uma query no oracle é lida de baixo para cima, logo o que for gerar um full scan deve ficar por como as primeiras clausulas para que o scan seja feito em dados filtrados.

Registrando.
Com o Oracle trabalhando por análise de custo, é indiferente a ordenação das colunas, junções e filtros de um comando sql.
Esta opção é a default a partir da versão Oracle 9i(se não me engano).

Cara to querendo fazer uma aplicação que capture e exiba o nivel de sunal wi-fi, vc sabe como posso fazer isso?

Thread errada não :?: