"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استعلامات SQL بطيئة؟ عزز أداء تطبيقك باستخدام هذه التقنية

استعلامات SQL بطيئة؟ عزز أداء تطبيقك باستخدام هذه التقنية

تم النشر بتاريخ 2024-11-06
تصفح:919

Slow SQL Queries? Boost Your App

التحدي

في تطبيقي (React Spring Boot Oracle)، أدى التعامل مع مجموعات البيانات الكبيرة إلى بطء وقت المعالجة بشكل محبط. كنت بحاجة إلى حل لتسريع الأداء دون المساس بالدقة أو الاكتمال.

الحل: المعالجة المتوازية لـ NTILE

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 أعلاه:

  • NTILE(2) يقسم البيانات إلى قسمين متساويين سيتم فرزهما بناءً على معرف_المبيعات.
  • استبدل :partitionNumber بـ 1 أو 2 لجلب البيانات من القسم المقابل.

على الواجهة الأمامية، يمكنك استخدام المعالجة المتوازية لجلب كل قسم بكفاءة:

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);
    }
}

في هذا الكود:

  • يقوم fetchPartition باسترداد البيانات لقسم معين.
  • تقوم fetchData بتشغيل كلتا عمليتي الجلب بالتوازي ومعالجة النتائج المجمعة.

كيف يمكنك أن تفعل ذلك أيضا

  • تحديد الاستعلامات الثقيلة: ابحث عن الاستعلامات التي تؤدي إلى إبطاء تطبيقك.
  • تطبيق NTILE: استخدم وظيفة NTILE لتقسيم نتائج الاستعلام إلى أجزاء أصغر.
  • المعالجة المتوازية: قم بتنفيذ هذه الاستعلامات الصغيرة بالتوازي، مع الاستفادة من قدرة تطبيقك على التعامل مع المهام المتزامنة.

إذا كنت تتطلع إلى تعزيز الأداء في تطبيقاتك كثيفة البيانات، فجرّب هذه الطريقة. إنها طريقة ذكية وفعالة لجعل استفساراتك تعمل بشكل أكثر جدية، وليس لفترة أطول.

اعتبار مهم

عند التعامل مع الطلبات المتزامنة، يمكن أن يصبح الطلب على اتصالات قاعدة البيانات كبيرًا. قد يؤدي هذا الاستخدام المكثف للاتصالات إلى إجهاد قاعدة البيانات الخاصة بك، مما قد يؤدي إلى اختناقات في الأداء. من الضروري مراقبة وإدارة عدد الطلبات المتزامنة للتأكد من أن قاعدة البيانات الخاصة بك تظل سريعة الاستجابة وتعمل بكفاءة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ritesh_rungta_e849b30e0b6/slow-sql-queries-boost-your-apps-performance-with-this-technique-3gnp?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3