ما هي أنظمة قاعدة البيانات التي يجب أن تنظر فيها شركة بدء التشغيل؟

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

سؤال

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

هذا جعلني أفكر في نظام قواعد البيانات غير العلمي مثل mongodb, Couchdb, كاساندرا أو هادوب. لسوء الحظ ليس لدي أي خبرة مع أي منهما. لقد قرأت بعض المراجعات الجيدة على MongoDB ويبدو مثيرة للاهتمام. يسعدني قضاء الوقت والتعلم إذا تبين أن أحدهم هو الطريق للذهاب. أقدر كثيرًا أي نقاط تقدم أو مشكلات يجب مراعاتها عند الذهاب مع عدم وجود DBMs العلائقية؟

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

المحلول

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

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

في الأساس ، لا تقضي وقتك (== المال) القلق بشأن ديسيبل لاستخدامه ، حيث يمكن لـ MySQL التعامل معها كثير من البيانات ، ثبت جيدا ودعم جيد.

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

لمعلوماتك ، حل التخزين المؤقت المفضل لدي memcached.

نصائح أخرى

لم يذكر أحد حتى الآن PostgreSQL كبديل لـ MySQL على الجانب العلائقي. كن على علم بأن mysql libs هي GPL نقية ، وليس LGPL. قد يجعلك ذلك إصدار الكود الخاص بك إذا قمت بالربط بها ، على الرغم من أن شخصًا ما لديه خبرة أكثر قانونية يمكن أن يخبرك بالآثار المترتبة على ذلك بشكل أفضل. على الجانب الآخر ، فإن الارتباط بمكتبة MySQL ليس هو نفسه الذي يتصل فقط بالخادم وإصدار أوامر ، يمكنك القيام بذلك بمصدر مغلق.

عادة ما يكون PostresQL أفضل بديل مجاني لـ Oracle وينبغي أن يكون ترخيص BSD أكثر ملاءمة للأعمال.

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

هناك ثلاثة أشياء لها تأثير عميق على أحدهما هو أفضل خيار لقاعدة البيانات ولا تذكر:

  1. حجم بياناتك أو إذا كنت بحاجة إلى تخزين الملفات داخل قاعدة البيانات الخاصة بك.
  2. عدد كبير من القراءات وعدد قليل جدا (حتى مقيد) يكتب. في هذه الحالة أكثر من قاعدة بيانات تحتاج إلى دليل مثل LDAP
  3. أهمية توزيع البيانات و/أو النسخ المتماثل. يمكن تكرار معظم قواعد البيانات العلائقية بشكل جيد إلى حد ما ، ولكن بسبب مفهومها/تصميمها لا تتعامل مع توزيع البيانات أيضًا ... ولكن هل ستتعامل مع أكبر قدر من البيانات التي لا تتناسب مع خادم واحد أو لديها حقوق الوصول التي تحتاج إلى منفصلة خاصة /خوادم إضافية؟

ومع ذلك ، سيذهب معظم الناس إلى قاعدة بيانات غير علائقية لمجرد أنهم لا يحبون تعلم SQL

ما رأيك هو كمية كبيرة من البيانات؟ MySQL, ، وأكثر محركات قاعدة البيانات العلائقية ، يمكنها التعامل مع كمية كبيرة من البيانات ، مع الفهارس المناسبة ومخطط قاعدة البيانات العاقلة.

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

فقط عندما لا يكون سريعًا بما فيه الكفاية ، ابدأ أولاً في التفكير في تحسين قاعدة البيانات والتغيير إلى محرك قاعدة البيانات المختلفة.

كن حذرا مع nhibernate, ، من السهل إنشاء حل لطيف وسهل الترميز معه ، ولكن لديه أداء سيئ مع كمية كبيرة من البيانات. على سبيل المثال ، ما إذا كنت تريد استخدام الجلب الكسول أو المتحمس مع الجمعيات يجب النظر فيه بعناية. لا أقصد أنه لا ينبغي عليك استخدام nhibernate ، ولكن تأكد من أنك تفهم كيفية عمل nhibernate ، على سبيل المثال ما تعنيه "N + 1" -المشكلات.

القياس ، لا تفترض.

يمكن أن تتوسع قواعد البيانات العلائقية وقواعد بيانات NOSQL بشكل كبير ، إذا كان التطبيق مكتوبًا بشكل صحيح في كل حالة ، وإذا تم ضبط النظام الذي يتم تشغيله بشكل صحيح.

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

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

أقترح أن تجرب كل ديسيبل وتختار تلك التي تجعل من الأسهل تطوير طلبك. اذهب إلى http://try.mongodb.org لمحاولة MongoDB مع برنامج تعليمي بسيط. لا تقلق كثيرًا بشأن السرعة لأنه في وقت البداية يكون وقت المطور أكثر قيمة من وقت وحدة المعالجة المركزية.

أعلم أن العديد من مستخدمي MongoDB تمكنوا من التخلص من ORM وطبقة التخزين المؤقت الخاصة بهم. يكون نموذج بيانات Mongo أقرب إلى الكائنات التي تعمل بها من الجداول العلائقية ، بحيث يمكنك عادةً تخزين الكائنات الخاصة بك مباشرة كما هي ، حتى لو كانت تحتوي على قوائم من الكائنات المتداخلة ، مثل منشور المدونة مع التعليقات. أيضًا ، نظرًا لأن Mongo سريع بما يكفي بالنسبة لمعظم المواقع كما هو ، يمكنك تجنب التعامل مع تعقيدات التخزين المؤقت وتقديم موقع في الوقت الفعلي بشكل عام. على سبيل المثال ، wordnik.com ذكرت 250،000 قراءة/ثانية و 100،000 إدراج/ثانية مع كائن 1.2 تيرابايت/5 مليار ديسيبل.

هناك بعض الطرق للاتصال بـ MongoDB من .NET ، لكن ليس لدي خبرة كافية مع تلك المنصة لمعرفة أفضل:

إخلاء المسئولية: أعمل في 10gen على MongoDB لذلك أنا متحيز بعض الشيء.

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