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.
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:
Atualize o cache periodicamente (diariamente/de hora em hora) usando uma tarefa agendada:
Modifique sua consulta para usar o cache em vez de fazer chamadas de API em tempo real .
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.