AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 342736
Accepted
Zaigham Ali Anjum
Zaigham Ali Anjum
Asked: 2024-10-02 18:20:27 +0800 CST2024-10-02 18:20:27 +0800 CST 2024-10-02 18:20:27 +0800 CST

Como posso otimizar a integração entre Oracle e GridDB ao unir tabelas grandes

  • 772

Atualmente, estou trabalhando na integração do GridDB com o Oracle 19c para um aplicativo com uso intensivo de dados. O objetivo é armazenar alguns dados de séries temporais no GridDB enquanto realizo processos e consultas ETL complexos no Oracle. Uma das tabelas do Oracle é particionada e contém mais de 500 milhões de registros. O desempenho da consulta é significativamente mais lento do que o esperado, mesmo com indexação e particionamento.

Aqui está uma versão simplificada da consulta que estou executando no Oracle 19c que também extrai dados do GridDB por meio de uma API:

SELECT t1.customer_name, t2.product_name, SUM(t1.amount), gdb.stock_price FROM transactions t1 JOIN products t2 ON t1.product_id = t2.product_id JOIN (SELECT * FROM TABLE(griddb_stock_price_api())) gdb ON t1.product_id = gdb.product_id WHERE t1.transaction_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD') GROUP BY t1.customer_name, t2.product_name, gdb.stock_price;

Detalhes dos dados: transações (Oracle):

customer_name: Nome do cliente que está realizando a transação.

product_id: O ID do produto que está sendo comprado.

valor: O valor da transação.

transaction_date: A data em que a transação foi feita (particionada por data).

produtos (Oracle):Detalhes dos dados:

transações (Oracle):

customer_name : Nome do cliente que está realizando a transação.

product_id: O ID do produto que está sendo comprado.

valor : O valor da transação.

transaction_date: A data em que a transação foi feita (particionada por data).

produtos (Oracle):

product_id: O ID do produto.

product_name: O nome do produto.

griddb_stock_price_api() (GridDB): Esta função de API recupera dados de preços de ações em tempo real do GridDB.

product_id: O ID do produto vinculado ao preço das ações.

stock_price: O preço atual das ações do produto.

product_id: O ID do produto.

product_name: O nome do produto.

griddb_stock_price_api() (GridDB): Esta função de API recupera dados de preços de ações em tempo real do GridDB.

product_id: O ID do produto vinculado ao preço das ações.

stock_price: O preço atual das ações do produto.

griddb
  • 1 1 respostas
  • 28 Views

1 respostas

  • Voted
  1. Best Answer
    Zaigham Ali Anjum
    2024-10-08T14:31:11+08:002024-10-08T14:31:11+08:00

    Funciona para mim. Você pode tentar isso

    Dados de cache do GridDB no Oracle:

    Em vez de buscar dados do GridDB em tempo real para cada consulta, você pode armazenar em cache periodicamente os dados de preço de ações em uma tabela de preparação do Oracle. Isso elimina a sobrecarga de fazer várias chamadas de API.

    Passos:

    Crie uma tabela para armazenar os preços das ações em cache:

    CREATE TABLE stock_price_cache AS
    SELECT * FROM TABLE(griddb_stock_price_api());
    

    Atualize o cache periodicamente (diariamente/de hora em hora) usando uma tarefa agendada:

    BEGIN
      DELETE FROM stock_price_cache;
      INSERT INTO stock_price_cache SELECT * FROM TABLE(griddb_stock_price_api());
    END;
    

    Modifique sua consulta para usar o cache em vez de fazer chamadas de API em tempo real .

    SELECT t1.customer_name, t2.product_name, SUM(t1.amount), gdb.stock_price
    FROM transactions t1
    JOIN products t2 ON t1.product_id = t2.product_id
    JOIN stock_price_cache gdb ON t1.product_id = gdb.product_id
    WHERE t1.transaction_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
    GROUP BY t1.customer_name, t2.product_name, gdb.stock_price;
    

    O cache de dados do GridDB, usando visualizações materializadas e chamadas de API em lote reduzirá significativamente o impacto no desempenho causado por chamadas de API externas. Combine isso com os recursos de otimização de consulta da Oracle, como particionamento, processamento paralelo e planos de consulta adaptáveis ​​para garantir o melhor desempenho.

    • 0

relate perguntas

  • Sendo atingido por restrições de limite de memória no GridDB apesar de aumentar o SQL e o storeMemoryLimit geral

  • Os dados aparentemente não estão sendo salvos na tabela particionada do GridDB (nenhum erro sendo gerado?)

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve