ما مدى أهمية اختلاف الأداء بين تخزين الذاكرة وتخزين قاعدة البيانات [مغلق]

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

سؤال

أقوم بإنشاء تطبيق دردشة في Signalr.يحتوي حاليًا على بعض الوظائف مع التخزين في قاعدة بيانات للتخزين الدائم للرسائل.أرغب في تنفيذ قوائم المستخدمين وأعدت قراءة هذه المقالة:

http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections#inmemory

ما مدى أهمية هذا الاختلاف بين التخزين في الذاكرة؟هل من المحتمل أن يكون هناك أكثر من فرق ثانٍ بين 1000 مستخدم و10000 مستخدم، على سبيل المثال، يراسلون بعضهم البعض بمعدل عادي يبلغ 1msg في الثانية (على سبيل المثال، لديهم الكثير من السكر)؟وما مدى فائدة ذلك؟أي إشارات إلى الاختبارات السابقة على الأداء سيكون موضع تقدير كبير.

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

شكرًا لك

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

المحلول

أنا أكره تقديم رابط واحد للإجابة ولكن غرفة الدردشة الوظيفية بشكل كامل هذه https://jabbr.net يعالج كل ما تشعر بالقلق.

المصدر: https://github.com/jabbr/jabbr

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

أما بالنسبة لتطبيق بنية DB الموجهة إلى 1000 مقابل 10،000 مستخدم كل هذا يتوقف على كيفية تطبيقه.على سبيل المثال، يقوم Redis Scale Out Provider بتشغيل جميعها في الذاكرة ولكنها تستمر في القرص على الفاصل الزمني.من الواضح أن هذا سريع للغاية ولكن يسمح ب "بعض" فقدان البيانات.

نصائح أخرى

هذا لا يرتبط مباشرة بسؤالك الأصلي.

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

لا يمكنك التنبؤ بموعد إعادة تدوير App Pool (إجمالاً، يمكنك تحديد وقت محدد لإعادة التدوير يدويًا).يمكن أن يحدث في غضون أيام قليلة أو ساعات قليلة.

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

تحقق من هذه المقارنة:

http://ruturaj.net/redis-memcached-tokyo -الأقلية والبلعية - المقارنة /

Redis (في الذاكرة) يتفوق على mysql (كلاسيكي DB) من الواضح أن مجالات طلبهم مختلفة تماما، لذلك لا يمكننا أن نقول ذلك، بشكل عام، Redis أفضل من MySQL. كل مشروع برمجيات هو عالمه الخاص، ويمكن تطبيق العديد من الحلول المختلفة. في بعض الحالات، يتم استخدام Redis ADN MYSQL معا لأجزاء مختلفة من منصة (مثل Magento Ecommerce)

الأمر متروك لك لتقييم إذا كنت بحاجة إلى حل في الذاكرة أو قاعدة بيانات قياسية. أعتقد أنه يمكن تحقيق إنتاجية من 1 إدراج / ثانية بسهولة من خلال MySQL، ولكن هذا مجرد رأي. أقترح عليك كتابة تنفيذ لمنتجك وهو "Redis Unare": البدء في استخدام MySQL، ولكن استخدامه من خلال طبقة تجريدية تتكيف مع MySQL و Redis (لا أعرف إذا كانت هذه الطبقة متوفرة مصدر مفتوح، ولكن يمكنك إطلاق سراحك ...)

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