私のアプリ (React Spring Boot Oracle) では、大規模なデータセットを処理すると、処理時間がイライラするほど遅くなりました。精度や完全性を損なうことなくパフォーマンスを向上させるソリューションが必要でした。
NTILE は、結果セットを指定された数のほぼ同じサイズのチャンク (「タイル」と呼ばれる) に分割するように設計された強力な SQL ウィンドウ関数です。各行には、順序付きセット内の位置に基づいてパーティション番号が割り当てられます。
NTILE を使用することで、クエリ結果を管理可能なチャンクに分割し、これらのパーティションを並列処理しました。このアプローチにより、データのフェッチと処理を同時に行うことができ、待ち時間が大幅に短縮されました。
これを実装する方法の実際的な例を次に示します:
WITH PartitionedSales AS ( SELECT sales_id, sales_amount, sales_date, NTILE(2) OVER (ORDER BY sales_id) AS partition_number -- Assigns a partition number (1 or 2) to each row FROM sales WHERE sales_date BETWEEN '2023-01-01' AND '2023-12-31' ) SELECT * FROM PartitionedSales WHERE partition_number = :partitionNumber -- Replace :partitionNumber with the actual partition number (1 or 2)
上記の SQL スニペットでは:
フロントエンドでは、並列処理を使用して各パーティションを効率的にフェッチできます:
async function fetchPartition(partitionNumber) { const response = await fetch('/api/sales?partition=' partitionNumber}); return response.json(); } async function fetchData() { try { const [partition1, partition2] = await Promise.all([ fetchPartition(1), // Fetch the first partition fetchPartition(2) // Fetch the second partition ]); // Combine and process results const combinedResults = [...partition1, ...partition2]; processResults(combinedResults); } catch (error) { console.error('Error fetching data:', error); } }
このコード内:
データ量の多いアプリケーションのパフォーマンスを向上させたい場合は、この方法を試してみてください。これは、クエリの実行時間を長くするのではなく、よりハードに実行するための賢明で効果的な方法です。
同時リクエストを処理する場合、データベース接続の需要が大きくなる可能性があります。この接続の多用によりデータベースに負担がかかり、パフォーマンスのボトルネックが発生する可能性があります。データベースの応答性を維持し、効率的に実行できるようにするには、同時リクエストの数を監視および管理することが不可欠です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3