Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() واجهة الاستعلام عن السجل النشط - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2020-06-03
تطوير البرمجيات

واجهة الاستعلام عن السجل النشط

مارتا بوليك

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

بعض السياق لنبدأ بـ

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

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

إحصائيات قراءة المستخدم

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

تجزئة[Hash[Book.joins.joins(:rentals).where(rentals: { user: user }).group_by(&:genre).map { |نوع، كتب| [genre, books| [genre, books.size] }]

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

في المثال أعلاه، يمكننا استخدام طريقة التجميع بدلاً من مجموعة روبيحسب الطريقة. سيتم تطبيق المجموعةبند BY إلى استعلام tSQL. علاوة على ذلك، يمكن استبدال طريقة التعيين والحجم بدالة تجميع العد. في النهاية، يتبقى لدينا استعلام يبدو كالتالي:

Book.joins.joins(:rentals).where(rentals: { user: user }).group(:kindre).count(:books)

يبدو الأمر أكثر بساطة!

أمثلة أخرى مفيدة

ستجد أدناه بعض الطرق الأخرى لاستخدام طرق الاستعلام التي أرى أنها تستحق المعرفة.

دعوة للمستخدمين غير النشطين

المهمة: تصفية المستخدمين الذين لم يسبق لهم استعارة كتاب أو قاموا بذلك منذ أكثر من عام.

يمكننا جلب جميع المستخدمين من خلال تضمين الإيجارات المرتبطة ثم تصفيتها باستخدام طريقة التحديد.

المستخدم.includes(:rentals).select do |user|
 | user.rentals.empty? | | user|.rentals.none? { | | ||إيجار|||تاريخ_البدء_التأجير >= Date.today - 1.year }
نهاية 

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

هكذا سيبدو الاستعلام الفرعي:

User.joins(:rentals).where(rentals: { start_date: (Date.today - 1.year).Date.today })

والآن، دعونا نضع كل ذلك معاً:

User.where.not(id: [User.joins.joins(:rentals).where(rentals: { start_date: (Date.today.today - 1.year)..Date.today })])

المؤلفون الممثلون تمثيلاً ناقصو التمثيل

المهمة: الحصول على مؤلفين بكتاب واحد أو صفر من الكتب المستعارة

القيام بذلك باستخدام طريقة التحديد بسيط للغاية، ولكن مرة أخرى - لا داعي للعمل على مجموعة كبيرة من البيانات حيث يمكن لمعلومات البيانات أن تصفيها لنا:

المؤلف.يتضمن(:كتب).select { |author| المؤلف.books.size <= 1 }

ومن ثم، فإن تصفية المؤلفين الذين لم يتم تعيين أي كتب لهم أمر سريع وسهل:

Author.left_joins(:books).where(الكتب: { id: nil })

من المهم أن تتذكر شيئًا واحدًا أثناء استخدام الوصلات اليسرى (والوصلات الخارجية بشكل عام). إذا كانت هناك سجلات في الجدول الأيسر (هنا: المؤلفون) ليس لها سجلات مقابلة في الجدول الأيمن (هنا: الكتب)، فسيتم ملء أعمدة الجدول الأيمن بقيم لا شيء.

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

Author.left_joins(:books).group(:id).having("count(*) <= ?", 1)

يأتي الشرط بعد دالة التجميع، لذا علينا استخدام جملة HAVING، بدلًا من جملة WHERE لتحديده.

تستحق طرق الاستعلام عن السجل النشط التحقق منها عند التفكير في أداء التطبيق. يمكنها تبسيط الشيفرة الخاصة بك وجعلها تعمل بشكل أسرع. آمل أن تساعدك الأمثلة المشتركة في استكشاف الإمكانيات التي تقدمها طرق الاستعلام.

اقرأ المزيد:

– حان الوقت لواقع جديد بدأ عصر العمل عن بُعد منذ شهر مضى

– هل تحتاج إلى استخدام أطر عمل JS الشائعة في تطبيق Rails الخاص بك؟ قد يكون Stimulus.js بديلاً

– تطوير تطبيقات الويب: لماذا تعتبر تقنية Ruby on Rails تقنية تستحق الاختيار؟

مقالات ذات صلة

تطوير البرمجيات

إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

ذا كوديست
تطوير البرمجيات

أفضل 10 شركات لتطوير البرمجيات في لاتفيا

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

thecodest
الحلول المؤسسية وحلول التوسعة

أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

استكشف هذا الدليل الأساسي حول تطوير برمجيات جافا outsourcing بنجاح لتعزيز الكفاءة والوصول إلى الخبرة وتحقيق نجاح المشروع باستخدام The Codest.

thecodest
تطوير البرمجيات

الدليل الشامل للاستعانة بمصادر خارجية في بولندا

إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

ذا كوديست
الحلول المؤسسية وحلول التوسعة

الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic