Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

Para baixo

Acesso rápido ao ORACLE DB Encontre agências semelhantes


Yelchev   (2001-12-03 10:26) [0]

Existe um problema Existe um banco de dados fora da ordem de um milhão de registros com campos de blob. Eu uso o componente Oracle Direct Acess. A leitura leva muito tempo. Como otimizar a leitura de tabelas pelo tempo e quais são os componentes de acesso mais rápido ao banco de dados. Por exemplo, direi que para selecionar registros 25000, cada um com um volume de 20K, você precisa de 15 min



Владислав   (2001-12-03 11:22) [1]

O texto do pedido para o estúdio.



petr_v_a   (2001-12-03 11:24) [2]

É improvável que existam componentes mais rápidos, se alguém for mais rápido, e não às vezes. Contra-pergunta - por que arrastar registros 25000 para um cliente? O usuário não aceitará mais os registros 50-100 na grade, desejará mais delícias em "pesquisar em encontrado", etc. No nível básico, leia sobre as configurações de armazenamento do LOB, existem páginas 100



Yelchev   (2001-12-03 12:22) [3]

O usuário não acende, e o próximo é selecionado a partir dos registros. O array massivo é então feito através de cálculos matemáticos e uma pequena lista é exibida no final da comparação. Nenhuma grade é usada. Alguém pode me dizer em geral como resolver o problema do trabalho rápido com esse banco de dados. Afinal, com o volume nos registros 1000000 em geral, o processo de leitura levará meio dia! Eu serei muito grato a todos que responderam))



Yuvich   (2001-12-03 12:44) [4]

Ahh, então isso significa que a amostra não dura ~ 15min., Mas o processamento de blobs dura 15min. Aqui você precisa olhar: o que é armazenado no blob - informações estruturadas ou não. Se estruturado, então é necessário colocá-lo nas tabelas e fazer o processamento não na etapa de amostragem, mas no estágio de escrever na tabela. Se não estiver estruturado, tente ainda apresentar as informações na forma de uma estrutura. Como disse um matemático: "não existe tal assunto que não possa ser representado como uma estrutura hierárquica".



Yelchev   (2001-12-03 12:50) [5]

Sim, não, não de todo assim. Eu fiz experimentos simplesmente em amostragem de dados sem qualquer processamento. Mas os dados não podem ser estruturados devido ao fato de que esses são arrays que descrevem a imagem processada e não podem ser divididos! Em geral, onde posso ler algo sobre como resolver esses problemas associados ao uso de bancos de dados extra grandes



petr_v_a   (2001-12-03 13:33) [6]

Isso é pior. cuidadosamente leia sobre as opções de armazenamento LOB :). Para v $ session_wait e v $ system_event, veja a que horas é realmente desperdiçado.Se tais volumes BLOB são calculados, talvez você deva pensar em procedimentos externos.Em geral, na minha opinião, a Oracle não bombeia grandes volumes muito bem para um cliente.



Yelchev   (2001-12-03 13:55) [7]

E quanto vou ganhar com o tempo se eu incorporar a comparação no shell (se for possível e não baixar informações para o cliente, desde que comparar arrays armazenados no wobbs requeira transformação de Fourier e outras operações aritméticas + alocação de uma grande quantidade de memória (até 29M)



Mick   (2001-12-03 14:05) [8]

Se o Oracl estiver no Wintel, eu transferiria o processamento de blobs para o servidor. Esse é o habitual link de três.



Yelchev   (2001-12-03 14:11) [9]

"Ou seja, o habitual três links"? Peço desculpas pela sua falta de compreensão, mas o que isso significa?



petr_v_a   (2001-12-03 14:29) [10]

A maneira mais fácil de medir o ganho de tempo é escrevendo
começar
para o loop cr in (<seu pedido>)
nulo
end;
end;
e vendo o quanto é feito это



Yuvich   (2001-12-03 15:48) [11]

Mike diz corretamente - você precisa transferir o processamento para o servidor, então a velocidade de processamento dependerá da capacidade do servidor e não da capacidade do cliente.

Mesmo se o Oracle não estiver no Wintel, você pode escrever um procedimento PL / SQL e chamar outro procedimento dele chamado externo e escrito, por exemplo, em C ou Cobol. Outra coisa é que você precisa conhecer a linguagem do sistema operacional em que o Oracle se encontra e suporta a chamada do Oracle. Para ser mais preciso, você precisa ler a documentação.



petr_v_a   (2001-12-03 16:29) [12]

"chamado externo" pode ser escrito tanto no Delphi quanto no montador, o principal é os contratos de chamada telefônica. Quanto ao Wintel, existe uma frase inteligente na documentação, (minha tradução) - "procedimentos externos são suportados em qualquer plataforma que suporte uma DLL, por exemplo Solaris" :))



Yuvich   (2001-12-03 17:12) [13]

Eu não acho que uma DLL escrita em Delphi possa ser usada no Solaris, é por isso que eu digo - você precisa escrever, mesmo em assembler, na linguagem cujo compilador está no sistema operacional.

Quanto à "frase inteligente", alguma adição: ... suporte a DLLs ou bibliotecas de acesso compartilhado dinamicamente carregadas ... por exemplo, bibliotecas Solaris .so.



Yuvich   (2001-12-03 17:15) [14]

Da mesma frase de documentação:

Assim, algumas tarefas são feitas mais rápida ou facilmente em uma linguagem de baixo nível, como C, que é mais eficiente em cálculos de precisão de máquina. Por exemplo, um Transformada Rápida de Fourier (FFT) rotina escrita em C é executada mais rápido que uma escrita em PL / SQL.



petr_v_a   (2001-12-03 17:53) [15]

> Yuvich :) Bem, esses, eu não pretendia usar a DLL escrita em Delphi no Solaris :) O ponto era que você poderia escrever sobre qualquer coisa, se apenas a chamada fosse sish. Isso deve começar, claro :)



Yuvich   (2001-12-03 18:02) [16]

> petr_v_a
Nada pessoal. Talvez eu não tenha entendido alguma coisa.



ASV   (2001-12-04 03:11) [17]

E a aritmética aqui é muito simples. Grid, então você provavelmente tem 10MB?
Portanto, 25000 * 20К = 500000К que, com uma largura de banda média de 600К / seg, fornece 13,8 minutos.
E não há nada a fazer, exceto transferir o cálculo para o servidor.

Alexander Sviridenkov



Страницы: 1 filial inteira

Fórum: "Bases";
Arquivo atual: 2002.01.08;
Download: [xml.tar.bz2];

em cima









Memória: 0.62 MB
Hora: 0.065 c
6-22298
karafuto
2001-10-11 14:00
2002.01.08
O que é TIdAntiFreeze (InDy) para?


3-21979
Maxman
2001-12-06 13:21
2002.01.08
DBTreeView


1-22135
Derzky
2001-12-19 19:51
2002.01.08
Como transferir o arquivo lançado para outra pasta?


1-22113
Yuraz
2001-12-19 20:25
2002.01.08
Irmãos porque


1-22200
Sergei_B
2001-12-15 09:57
2002.01.08
Int64 e tamanho do arquivo





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese romeno Russa sérvio Slovak esloveno espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol