متى تستخدم أنظمة الأقراص Mongodb أو غيرها من أنظمة قاعدة البيانات الموجهة للوثائق؟ [مغلق

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

  •  16-09-2019
  •  | 
  •  

سؤال

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

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

لذلك السؤال هو: متى تستخدم Mongodb وعند استخدام RDBMS. ما الذي تتناوله أو mongodb أو mysql، إذا كان لديك الخيار ولماذا تأخذها؟

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

المحلول

في nosql: إذا كان ذلك سهلا, ، يكتب المؤلف عن MongoDB:

MongoDB ليس متجر مفتاح / قيمة، إنه أكثر من ذلك بكثير. انها بالتأكيد ليست rdbms أيضا. لم أستخدم MongoDB في الإنتاج، لكنني استخدمت ذلك قليلا بناء تطبيق اختبار وهو قطعة رائعة جدا من المجموعة. يبدو أنه مؤد للغاية وإما لديه، أو سيكون لديك قريبا، والتسامح مع الأخطاء والأشجار التلقائي (AKA، فسيكون مقياس). أعتقد أن Mongo قد يكون أقرب شيء لاستبدال RDBMS الذي رأيته حتى الآن. لن يعمل من أجل جميع مجموعات البيانات وأنماط الوصول، لكنها مبنية لأشياء Crud النموذجية الخاصة بك. تخزين ما هو في الأساس تجزئة ضخمة، والقدرة على تحديد أي من هذه المفاتيح، هو ما يستخدمه معظم الناس قاعدة بيانات علائقية ل. إذا كان DB الخاص بك هو 3NF وأنت لا تفعل أي انضمام (أنت فقط تختار مجموعة من الجداول ووضع جميع الكائنات معا، ويعرف أيضا باسم ما يفعله معظم الأشخاص في تطبيق ويب)، من المحتمل أن يركل Mongodb الحمار لك.

بعد ذلك، في الختام:

الشيء الحقيقي للإشارة إليه هو أنه إذا كنت تعود مرة أخرى من صنع شيء رائع لأنه لا يمكنك اختيار قاعدة بيانات، فأنت تفعل ذلك خطأ. إذا كنت تعرف MySQL، فما عليك سوى استخدامه. التحسين عندما تحتاج فعلا إلى. استخدمه مثل متجر AK / V، واستخدامه مثل RDBMS، ولكن من أجل الله، قم ببناء تطبيق Killer الخاص بك! أي من هذا سوف يهم معظم التطبيقات. الفيسبوك لا يزال يستخدم mysql، والكثير. يستخدم ويكيبيديا MySQL، كثيرا. FriendFeed يستخدم MySQL، والكثير. NOSQL هي أداة رائعة، لكن من المؤكد أنها لن تكون ميزة التنافسية الخاصة بك، لن تجعل تطبيقك ساخنا، والأهم من ذلك كله، لن يهتم المستخدمون بأي من هذا.

ماذا سأبني تطبيقي التالي؟ ربما postgres. هل سأستطيع استخدام NOSQL؟ يمكن. قد أستخدم أيضا Hadoop و Hive. قد أبقي كل شيء في ملفات مسطحة. ربما سأبدأ القرصنة على maglev. سوف أستخدم كل ما هو الأفضل لهذا المنصب. إذا كنت بحاجة إلى الإبلاغ، فلن أستخدم أي nosql. إذا كنت بحاجة إلى التخزين المؤقت، فربما ستستخدم طاغية طوكيو. إذا كنت بحاجة إلى حموضة، فلن أستخدم NOSQL. إذا كنت بحاجة إلى طن من العدادات، فسأي استخدام Redis. إذا كنت بحاجة إلى المعاملات، فسأي استخدام postgeres. إذا كان لدي طن من نوع واحد من المستندات، فربما استخدم Mongo. إذا كنت بحاجة إلى كتابة مليار كائن في اليوم، من المحتمل أن أستخدم Voldemort. إذا كنت بحاجة إلى البحث النص الكامل، فمن المحتمل أن استخدم Solr. إذا كنت بحاجة إلى نص كامل للبحث عن البيانات المتقلبة، فربما أستخدم أبو الهول.

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

رابط بديل للمادة

نصائح أخرى

بعد عامين باستخدام Mongodb للحصول على تطبيق اجتماعي، شهدت ما يعنيه حقا للعيش بدون SQL RDBMS.

  1. تنتهي بك الأمر إلى كتابة وظائف للقيام بأشياء مثل الانضمام إلى البيانات من الجداول / المجموعات المختلفة، وهو شيء سيفعله RDBMS لك تلقائيا.
  2. إمكانيات الاستعلام الخاصة بك مع NOSQL هي المعلفة بشكل كبير. قد يكون MongoDB أقرب شيء ل SQL، لكنه لا يزال وراء ذلك بكثير. ثق بي. استفسارات SQL هي فائقة بديهية ومرنة وقوية. استعلامات منغودب ليست كذلك.
  3. يمكن لاستفسارات MongoDB استرداد البيانات من مجموعة واحدة فقط والاستفادة من فهرس واحد فقط. والمنغودب ربما واحدة من أقواس قواعد بيانات NOSQL المرنة. في العديد من السيناريوهات، هذا يعني المزيد من الرحلات الدائرية إلى الخادم للعثور على سجلات ذات صلة. ثم تبدأ في إزالة البيانات - مما يعني وظائف الخلفية.
  4. إن حقيقة أنها ليست قاعدة بيانات علنية تعني أنك لن يكون لديك (فكر من قبل البعض أن تكون سيئا أداء) تقييدها لضمان أن تكون بياناتك متسقة. أؤكد لكم أن هذا سيكون في نهاية المطاف إنشاء تناقضات بيانات في قاعدة البيانات الخاصة بك. كن مستعدا. على الأرجح ستبدأ في كتابة العمليات أو الشيكات للحفاظ على قاعدة البيانات الخاصة بك متسقة، والتي من المحتمل ألا تؤدي أفضل من السماح بإجراء RDBMS من أجلك.
  5. ننسى الأطر الناضجة مثل السبات.

أعتقد أن 98٪ من جميع المشاريع ربما تكون أفضل بطريقة أفضل مع SQL RDBMS نموذجي من NOSQL.

لتخزين هذه البيانات غير المنظمة

كما قلت، فإن Mongodb هو أفضل مناسبة لتخزين البيانات غير منظم. وهذا يمكن تنظيم بياناتك بتنسيق المستند. دعا هذه chedbs نوسكل مخازن البيانات (mongodb., البوتشد, فولدمورت) هي مفيدة جدا للتطبيقات التي تتوافق بشكل كبير وتتطلب الوصول إلى البيانات بشكل أسرع من مخازن البيانات الكبيرة هذه.

وتنفيذ قواعد البيانات هذه أبسط من RDBMS العادية. نظرا لأن هذه هي كائنات ثنائية نمطية ذات قيمة ذات قيمة أو وثيقة مستقرة مباشرة في القرص. مخازن البيانات هذه لا تنفذ خصائص الحمض, ، وأي مخططات. وبعد هذا لا يوفر أي عملية تجارية قدرات. لذلك هذا يمكن أن مقياس كبير ويمكننا تحقيق وصول أسرع (كل من القراءة والكتابة).

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

ساختار mysql. لإنشاء المنتديات لهذا النوع من الأشياء. لأن هذا لن يقطع كبير. وهذا هو تطبيق بسيط للغاية (مشترك) والذي قام بالعلاقات المنظمة بين البيانات.

لاحظ أن مونغو في الأساس يخزن JSON. إذا كان تطبيقك يتعامل مع الكثير من كائنات JS (مع التعشيش) وتريد أن تستمر في استمرار هذه الكائنات، فهناك حجة قوية للغاية لاستخدام Mongo. يجعل طبقات DAL و MVC الخاصة بك رقيقة جدا، لأنها ليست تعبئة الأمم المتحدة لجميع خصائص كائنات JS ومحاولة فرضها في بنية (مخطط) أنها لا تناسبها بشكل طبيعي.

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

أود أن أقول استخدام RDBMS إذا كنت بحاجة إلى معاملات معقدة. وإلا سأذهب مع MongoDB - أكثر مرونة للعمل مع وأنت تعرف أنه يمكن أن يتجاوز عندما تحتاج إلى ذلك. (أنا متحيز رغم ذلك - أعمل في مشروع Mongodb)

من يحتاج إلى موزعة، منتديات شارد؟ ربما Facebook، ولكن ما لم تقم بإنشاء منافس Facebook، ما عليك سوى استخدام MySQL أو Postgres أو كل ما تشعر بالراحة. إذا كنت ترغب في تجربة MongoDB، حسنا، لكن لا تتوقع أن تفعل السحر بالنسبة لك. سيكون له تراجعه و Nastiness العام، تماما مثل كل شيء آخر، لأنني متأكد من أنك قد اكتشفت بالفعل إذا كنت تعمل بالفعل على ذلك بالفعل.

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

شخصيا، أعتقد أن "NOSQL" سوف يذبل ويموت من تجزئة، حيث لا توجد معايير محددة (بحكم التعريف تقريبا). لذلك لن أراهن شخصيا على ذلك لأي مشاريع طويلة الأجل.

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

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

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

هذا هو أحد المجالات التي أعتقد حقا أن mongodb يناسبها، لكن mysql / postgresql أكثر موصى بها بشكل عام. هناك الكثير من الوثائق وموارد المطور على الويب، وكذلك وظائفها وأغانيها.

السبب الرئيسي 2 لماذا قد ترغب في تفضيل Mongo

  • المرونة في تصميم المخطط (متجر المستندات JSON Type).
  • قابلية التوسع - ما عليك سوى إضافة العقد ويمكن أن يتجاوز أفقيا جيدا.

انها مناسبة لتطبيقات البيانات الكبيرة. RDBMS ليست جيدة للبيانات الكبيرة.

أنت تعرف، كل هذه الأشياء عن الانضمام و "المعاملات المعقدة" - لكنها كانت مونتي نفسه، منذ عدة سنوات، شرحت "الحاجة" للارتكاب / التراجع، قائلا إن "كل ما يتم في فصول المنطق (وليس قاعدة البيانات) على أي حال "- لذلك هو نفس الشيء مرة أخرى. ما هو مطلوب هو محرك تخزين / استرجاع سريعا للبيانات / استرجاع سريعا بعد

مثل قال سابقا، يمكنك الاختيار بين الكثير من الخيارات، نلقي نظرة على كل هذه الخيارات:http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis.

ما أقترحه هو العثور على أفضل مزيج الخاص بك: MySQL + MEMCACHE رائع حقا إذا كنت بحاجة إلى حمض وتريد الانضمام إلى بعض الجداول Mongodb + Redis مثالية ل Store Store NEO4J مثالية لقاعدة بيانات الرسم البياني

ما أقوم به: أبدأ مع MySQL + MEMCACHE لأنني أستخدمه، ثم أبدأ في استخدام إطار قاعدة البيانات الآخرين. في مشروع واحد، يمكنك الجمع بين mysql و mongodb على سبيل المثال!

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