سؤال

لقد سمعت الكثير من الحديث عن أنظمة قاعدة بيانات الخطر (التي يتم توزيعها غالبًا) مثل MongoDB ، و CouchDB ، و SimpledB ، وما إلى ذلك ...

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

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

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

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

المحلول

سأتصل فقط بأسباب أو سببين مشتركين (أنا متأكد من أن الناس سيكتبون إجابات مقال)

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

    • ينتشر منطقك عبر طبقات متعددة (التطبيق و DB)
    • ينتشر منطقك عبر لغات متعددة (SQL ولغة التطبيق المفضلة لديك)

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

  2. إدارة المخطط - خاصة على الأنظمة التي لا يكون فيها التوقف عن العمل أمرًا صعبًا. تقليل تعقيد المخطط يقلل من هذه الصعوبة.

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

  4. التكلفة: معظم أنظمة RDBMS ليست مجانية. القادة في القياس (Oracle ، Sybase ، SQL Server) كلها منتجات تجارية. عند التعامل مع أنظمة كبيرة ("مقياس الويب") ، يمكن أن تفي تكاليف ترخيص قاعدة البيانات أو تتجاوز تكاليف الأجهزة! التكاليف مرتفعة بما يكفي لتغيير اعتبارات البناء/الشراء العادية بشكل كبير نحو بناء حل مخصص على رأس عرض OSS (جميع عروض NOSQL الهامة هي OSS)

نصائح أخرى

المخطط رائع لسببين:

  1. تحسن الدماغ الحساسية لتخزين المستندات
  2. يحل مصفوفة متناثرة و كيان-قيمة القيمة مشاكل التخزين.

لقد استخدمت كل من SQL و NO-SQL لتطبيقات الإنتاج في Ruby on Rails. أنا لست خبيرًا في قاعدة البيانات ويجب أن أعترف بحمض Googling ومصطلحات مماثلة لأنهم غير مألوفين بالنسبة لي.

"آه ها ها! أتباع آخر لا شيء يدرك القفز على أحدث عربة" يمكنك أن تقول. لكن ، في الواقع ، أنا سعيد حقًا بقراري باستخدام MongoDB على تطبيقنا الأخير البالغ من العمر عامين ، ولهذا السبب ...

كان الجانب الآخر من الحد الأدنى من الحد من الدماغ هو تجربتي مع نظام التجارة الإلكترونية Magento. لا أريد أن أتعامل معها لأنها خدمتني جيدًا في ذلك الوقت ، لكنها حققت حقًا المعالج يحاول حساب السمات لكل منتج. كان السبب الكامن وراءه هو تخزين قيمة المنتج لبيانات المنتج. ذاكرة التخزين المؤقت أو الملعون كان الحل.

الميزة الرئيسية بالنسبة لي هي التحسين في المكان الوحيد الذي يهم حقًا - عقلك. يتم انتقاد العديد من التقنيات على كفاءتها في الذاكرة والمعالجات والأجهزة ، ومع ذلك ، فإن ديسيبل بديهي للغاية لفهم يجلب مزاياه الخاصة. لقد وجدنا أنه من السريع إضافة ميزات إلى التعليمات البرمجية الخاصة بنا لأن قاعدة البيانات تبدو ببساطة مثل العالم الحقيقي الذي ننظمه. عندما طلبت من عملاء التجارة الإلكترونية أن يقدموا لي قائمة منتجاتهم ، فإنهم يميلون بشكل طبيعي إلى استخدام Excel (Think Table Store). الأعمدة الأولى سهلة:

  1. اسم المنتج
  2. سعر
  3. نوع المنتج (

ثم يصبح الأمر أكثر صعوبة ومغطاة بالملاحظات ، وترميز الألوان والروابط إلى الجداول الأخرى (نعم .. العلاقات)

  1. اللون (بعض المنتجات فقط)
  2. الحجم (X كبير ، كبير ، صغير) - فقط للمنتجات 8'9'10 ، تستخدم أندية الجولف مقياسًا مختلفًا
  3. اللون 2. يطوق كات خيارين للألوان.
  4. القوة الكهربائية
  5. نوع التثبيت (ذكر ، أنثى)

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

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

يجب أن يكون القلق الأساسي هو ما تحتاج إلى فعله ببياناتك. إذا كان لديك مجموعة بيانات ضخمة ووجدت RDBMs تقليدية لتكون عنق الزجاجة ، فقد ترغب في تجربة مخطط أو AA NOSQL المحلول.

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

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

هذا مفيد بشكل خاص عند التعامل مع الأشياء. يمكنك في كثير من الحالات تخزين كائن كسلسلة من المستندات المتداخلة.

قواعد بيانات NOSQL ليست مخططًا ؛ المخطط مضمن في البيانات. يطلق عليهم بشكل صحيح شبه منظم. في بعض متاجر بيانات KV ، ومع ذلك ، قد يكون المخطط مضمنًا في التعليمات البرمجية. ميزة النهج شبه المنظم هي ثنائي: المرونة التي تكون فيها الأعمدة جزءًا من صف (يمكن أن تحتوي صف واحد على 5 أعمدة وآخر لها 5 أعمدة مختلفة ، ومرونة في خصائص الأعمدة (على سبيل المثال ، أطوال متغيرة)

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

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

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