ما هي أفضل طريقة لتطبيق العميل للتفاعل على الفور مع تحديث في قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/587027

  •  06-09-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لبرنامج رد فعل فوري على تحديث للبيانات في قاعدة بيانات؟

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

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

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

هل كانت مفيدة؟

المحلول

لديك أساسا قضيتين هنا:

  1. تريد أن تكون متصفح قادرا على تلقي الأحداث غير المتزامنة من خادم تطبيق الويب دون اقتراع في حلقة ضيقة.

  2. تريد أن يتمكن تطبيق الويب من تلقي الأحداث غير المتزامنة من قاعدة البيانات دون اقتراع في حلقة ضيقة.

للمشكلة رقم 1

شاهد روابط ويكيبيديا هذه لنوع التقنيات التي أعتقد أنك تبحث عنها:

تحرير: 19 مارس 2009 - فقط جاء عبر عرفت والتي قد تكون ذات أهمية بالنسبة للمشكلة رقم 1.

لمشكلة # 2

سيكون الحل محددا له قاعدة البيانات التي تستخدمها، وربما يستخدم برنامج تشغيل قاعدة البيانات الخاص بك أيضا. على سبيل المثال، مع postgresql. سوف تستخدم استمع و إخطار. وبعد (وعند المخاطرة التي تم تصويتها، من المحتمل أن تستخدم مشغلات قاعدة البيانات لاستدعاء أمر الإشعار عند التغييرات في بيانات الجدول.)

طريقة أخرى ممكنة للقيام بذلك هي إذا كانت قاعدة البيانات واجهة لإنشاء إجراءات مخزنة أو مشغلات ترتبط بمكتبة ديناميكية (أي ملف DLL أو .SO). ثم يمكنك كتابة رمز إشارة الخادم في ج أو أي شيء.

على نفس الموضوع، تتيح لك بعض قواعد البيانات كتابة الإجراءات المخزنة بلغات مثل جافا، روبي, بيثون و الآخرين. وبعد قد تكون قادرا على استخدام أحد هذه (بدلا من شيء يتكون من كود الجهاز DLL مثل C HOS) لآلية الإشارة.

نأمل أن يمنحك أفكارا كافية للبدء.

نصائح أخرى

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

خذ نظرة خاطفة مع Wireshark في وقت ما ... هناك بعض حركة Google التي تسير هناك بانتظام، يبدو.

اعتمادا على DB الخاص بك، قد تساعد المشغلات. اعتمد التطبيق الذي كتبته على المشغلات ولكني استخدم آلية الاقتراع "أعرف" أن شيئا ما قد تغير. ما لم تتمكن من توصيل التغيير من DB، فإن بعض آلية الاقتراع ضرورية، أود أن أقول.

جمعية البناء الخيرية.

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

إعادة تحرير الخاص بك: طريقة تطبيق التطبيقات مثل Gmail، في الواقع، مع اقتراع Ajax. تحميل هذا عبث البيانات امتداد فايرفوكس لرؤيته في العمل. الخدعة هناك للحفاظ على استعلام الاقتراع الخاص بك بشكل أعمى بسرعة في حالة "No news".

لسوء الحظ، لا توجد طريقة لدفع البيانات إلى مستعرض ويب - يمكنك فقط إرسال بيانات فقط كرد على طلب - هذه مجرد طريقة عمل HTTP.

AJAX هو ما تريد استخدامه على الرغم من: استدعاء خدمة ويب بمجرد عدم الإفراط في ذلك، شريطة تقديم خدمة الويب للتأكد من أنها تتلقى كمية صغيرة من البيانات، ويرسل كمية صغيرة مرة أخرى، ويمكن تشغيلها بسرعة كبيرة لتوليد هذا الاستجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top