استراتيجية الوصول إلى البيانات لموقع مثل SO - استعلامات SQL المصنفة والتحديثات المتزامنة التي تؤثر على النوع؟
-
30-09-2019 - |
سؤال
أنا أعمل على تطبيق ويب Grails الذي سيكون متشابهًا في أنماط الوصول إلى StackOverflow أو MyLifeIsaverage - يمكن للمستخدمين التصويت على الإدخالات ، ويستخدم أصواتهم لفرز قائمة من الإدخالات بناءً على عدد الأصوات. يمكن وضع الأصوات أثناء إجراء الاستعلامات المحددة المرتبة.
نظرًا لأن Selects ستقفل جزءًا كبيرًا من الجدول ، يبدو أن قفل المعاملات العادية قد يتسبب في استقبال التحديثات إلى الأبد (بالنظر إلى حركة المرور الكافية). هل عمل أي شخص على تطبيق مع نمط وصول للبيانات مثل هذا ، وإذا كان الأمر كذلك ، هل وجدت طريقة للسماح لهذه التحديثات واختيار أن تحدث بشكل أكثر أو أقل بشكل متزامن؟ هل يعرف أي شخص كيف تقترب مواقع ذلك؟
كانت فكرتي هي جعل القراءات القذرة المرتبة ، لأنها مقبولة إذا لم تكن محدثة تمامًا طوال الوقت. هذه هي فكرتي الوحيدة لتحسين أداء هذه الاختيار والتحديثات ، لكنني اعتقدت أن شخصًا ما قد يعرف طريقة أفضل.
المحلول
لا تستنتج الكثير عن قاعدة البيانات الخاصة بك - قاعدة البيانات هي حيوانات معقدة للغاية ولن تعمل دائمًا بالطريقة التي تفكر بها. ستؤدي قاعدة بيانات MVCC ، وهي أي قاعدة بيانات حديثة (أي ليس طاولات Myisam) ، فحص الجدول دون قفل بشدة. المفهوم الكامل لـ MVCC هو أن عمليات الكتابة لا تحظر القراءات والعكس بالعكس. ولكن لن يتم إجراء فحص الجدول هنا. للإجابة بكفاءة على الاستعلام ، ربما يكون هناك فهرس على الأصوات. سيتم استخدام هذا الفهرس إلى 1) الحد من عدد الصفوف التي تم استردادها من الجدول 2) استرجاعها بترتيب فرز (أي دون إجراء نوع.)