أسباب وجيهة لعدم استخدام قاعدة البيانات العلائقية؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

هل يمكنك الإشارة إلى أدوات تخزين البيانات البديلة وإعطاء أسباب وجيهة لاستخدامها بدلاً من قواعد البيانات العلائقية القديمة؟في رأيي، نادرًا ما تستخدم معظم التطبيقات القوة الكاملة لـ SQL - سيكون من المثير للاهتمام معرفة كيفية إنشاء تطبيق خالٍ من SQL.

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

المحلول

ملفات نصية عادية في نظام الملفات

  • من السهل جدًا الإنشاء والتحرير
  • من السهل على المستخدمين التعامل مع أدوات بسيطة (مثل:محرري النصوص، grep وما إلى ذلك)
  • تخزين فعال للوثائق الثنائية

ملفات XML أو JSON الموجودة على القرص

  • كما هو مذكور أعلاه، ولكن مع قدرة أكبر قليلاً على التحقق من صحة البنية.

جدول البيانات / ملف CSV

  • نموذج سهل للغاية يمكن لمستخدمي الأعمال فهمه

التخريب (أو نظام مماثل للتحكم في الإصدار يعتمد على القرص)

  • دعم جيد جدًا لإصدارات البيانات

بيركلي دي بي (في الأساس، جدول تجزئة يعتمد على القرص)

  • بسيط جدًا من الناحية المفاهيمية (فقط مفتاح/قيمة غير مكتوبة)
  • سريع جدا
  • لا يوجد النفقات الإدارية
  • يدعم المعاملات على ما أعتقد

قاعدة بيانات أمازون البسيطة

  • أعتقد أنه يشبه إلى حد كبير Berkeley DB، لكنه استضافه

مخزن بيانات محرك التطبيقات من Google

  • مستضافة وقابلة للتطوير بدرجة كبيرة
  • تخزين قيمة المفتاح لكل مستند (أي.نموذج بيانات مرن)

كاوتش دي بي

  • التركيز على الوثيقة
  • تخزين بسيط للبيانات شبه المنظمة / المستندة إلى المستندات

مجموعات اللغة الأصلية (المخزنة في الذاكرة أو المتسلسلة على القرص)

  • تكامل لغوي محكم للغاية

محرك تخزين مخصص (مكتوب بخط اليد).

  • من المحتمل أن يكون الأداء عاليًا جدًا في حالات الاستخدام المطلوبة

لا أستطيع أن أدعي أنني أعرف الكثير عنهم، ولكن قد ترغب أيضًا في الاطلاع عليها أنظمة قاعدة بيانات الكائنات.

نصائح أخرى

إجابة مات شيبارد رائعة (مُعدلة)، لكنني سأأخذ هذه العوامل في الاعتبار عند التفكير في المغزل:

  1. بناء :هل من الواضح أنها تتكسر إلى أجزاء، أم أنك تقوم بمقايضات؟
  2. الاستخدام :كيف سيتم تحليل/استرجاع/تجميع البيانات؟
  3. حياة :ما هي المدة التي تكون فيها البيانات مفيدة؟
  4. مقاس :ما مقدار البيانات الموجودة؟

إحدى المزايا الخاصة لملفات CSV عبر RDBMSes هي أنه يمكن تكثيفها ونقلها بسهولة إلى أي جهاز آخر عمليًا.نحن نقوم بعمليات نقل كبيرة للبيانات، وكل شيء بسيط بما يكفي، فنحن نستخدم ملف CSV واحدًا كبيرًا فقط، ومن السهل كتابته باستخدام أدوات مثل rsync.لتقليل التكرار على ملفات CSV الكبيرة، يمكنك استخدام شيء مثل يامل.لست متأكدًا من أنني سأقوم بتخزين أي شيء مثل JSON أو XML، إلا إذا كانت لديك متطلبات علاقة هامة.

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

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

ملحوظة أنا معتاد على التفكير بالأحجام "الكبيرة".

نظام الملفات مفيد جدًا لتخزين البيانات الثنائية، والذي لا يعمل بشكل جيد أبدًا في قواعد البيانات العلائقية.

جرب بريفايلر:http://www.prevayler.org/wiki/Prevayler هو بديل لنظام RDBMS.في الموقع لديها المزيد من المعلومات.

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

محرك تخزين مخصص (مكتوب بخط اليد)/يحتمل أن يكون أداءً عاليًا جدًا في حالات الاستخدام المطلوبة

http://www.hdfgroup.org/

إذا كانت لديك مجموعات بيانات هائلة، فبدلاً من تجميع مجموعات البيانات الخاصة بك، يمكنك استخدام HDF، وهو تنسيق البيانات الهرمي.

http://en.wikipedia.org/wiki/Hierarchical_Data_Format:

يدعم HDF العديد من نماذج البيانات المختلفة، بما في ذلك المصفوفات متعددة الأبعاد والصور النقطية والجداول.

كما أنه هرمي مثل نظام الملفات، ولكن يتم تخزين البيانات في ملف ثنائي سحري واحد.

HDF5 عبارة عن مجموعة تتيح إدارة مجموعات البيانات الكبيرة والمعقدة للغاية.

فكر في بيتابايت من بيانات الاستشعار عن بعد التابعة لناسا/مختبر الدفع النفاث.

يوم سعيد،

إحدى الحالات التي يمكنني التفكير فيها هي عندما لا يمكن تمثيل البيانات التي تقوم بتصميمها بسهولة في قاعدة بيانات علائقية.

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

أنا تقريبا كل هذه الحالات, أ اوو ديسيبل يتم استخدامه، إما منتجًا تجاريًا أو نظامًا ذاتيًا يسمح بالتسلسل الهرمي للأشياء.

لقد عملت على تطبيق مراقبة 3G لشركة كبيرة ستظل بدون اسم، ولكن شعارها عبارة عن بقعة نبيذ أحمر (-:، واستخدموا قاعدة بيانات OO لتتبع جميع السمات المتنوعة للخلايا الفردية داخل الشبكة.

يتم استجواب قواعد البيانات هذه باستخدام تقنيات خاصة تكون عادةً خالية تمامًا من SQL.

هث.

هتافات،

روب

قواعد بيانات الكائنات ليست قواعد بيانات علائقية.يمكن أن تكون مفيدة حقًا إذا كنت تريد فقط حشو بعض الكائنات في قاعدة البيانات.كما أنها تدعم إصدار وتعديل الفئات للكائنات الموجودة بالفعل في قاعدة البيانات. com.db4o هو أول ما يتبادر إلى الذهن.

في بعض الحالات (بيانات السوق المالية والتحكم في العمليات على سبيل المثال) قد تحتاج إلى استخدام قاعدة بيانات في الوقت الفعلي بدلاً من نظام إدارة قواعد البيانات RDBMS.يرى رابط ويكي

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

وتشمل منتجات OODBMS الأخرى الموضوعية, الأحجار الكريمة (سوف تحتاج إلى الحصول على أعمال مرئية Smalltalk لتشغيل إصدار Smalltalk ولكن يوجد أيضًا إصدار Java).كانت هناك أيضًا بعض المشاريع البحثية مفتوحة المصدر في هذا الفضاء - تتبادر إلى ذهني EXODUS وSHORE التابعة لها.

للأسف، يبدو أن المفهوم قد مات، ربما بسبب عدم وجود معيار واضح للعيان وقدرة استعلام مخصصة ضعيفة نسبيًا مقارنة بأنظمة RDMBS المستندة إلى SQL.

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

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

الأشياء الأخرى التي لا تتلاءم بشكل جيد مع نظام RDBMS هي هياكل البيانات الهرمية وأعتقد أن البيانات الجغرافية المكانية والنماذج ثلاثية الأبعاد ليس من السهل التعامل معها أيضًا.

خدمات مثل أمازون إس 3 توفير نماذج تخزين أبسط (مفتاح->قيمة) لا تدعم SQL.قابلية التوسع هي المفتاح هناك.

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

هناك عدد كبير من الطرق لتخزين البيانات - حتى "قاعدة البيانات العلائقية" تغطي مجموعة من البدائل من مكتبة بسيطة من التعليمات البرمجية التي تعالج ملفًا محليًا (أو ملفات) كما لو كانت قاعدة بيانات علائقية على أساس مستخدم واحد، من خلال الأنظمة القائمة على الملفات يمكنها التعامل مع عدة مستخدمين لمجموعة كبيرة من الأنظمة القائمة على "الخادم" الجادة.

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

بالنسبة لنا، هذا هو الأمر - إما أننا سنستخدم شيئًا من شأنه أن يفعل SQL (يقدم MS مجموعة من الأدوات التي يتم تشغيلها من .DLL للقيام بأشياء مستخدم واحد على طول الطريق إلى خادم المؤسسة وجميعهم يتحدثون نفس SQL (مع وجود قيود في الطرف السفلي)) أو سنستخدم XML كتنسيق لأن الإسهاب (بالنسبة لنا) نادرًا ما يمثل مشكلة.

لا يتعين علينا حاليًا معالجة البيانات الثنائية في تطبيقاتنا حتى لا يظهر هذا السؤال.

مورف

قد يرغب المرء في التفكير في استخدام خادم LDAP بدلاً من قاعدة بيانات SQL التقليدية إذا كانت بيانات التطبيق موجهة بشكل كبير نحو المفاتيح/القيمة وذات طبيعة هرمية.

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

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

قواعد بيانات النص الكامل، والتي يمكن الاستعلام عنها باستخدام عوامل القرب مثل "في غضون 10 كلمات"، وما إلى ذلك.

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

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

أيضًا:* السيناريوهات المضمنة - حيث يُطلب عادةً استخدام شيء أصغر من نظام RDBMS الكامل. Db4o هو ODB الذي يمكن استخدامه بسهولة في مثل هذه الحالة.* التطوير السريع أو إثبات المفهوم - حيث ترغب في التركيز على العمل وعدم القلق بشأن طبقة الاستمرارية

نظرية CAP يشرح ذلك بإيجاز.يوفر SQL بشكل أساسي "اتساقًا قويًا:يرى جميع العملاء نفس العرض، حتى في حالة وجود تحديثات".

قبلة:اجعلها صغيرة وبسيطة

سأقدم RDBMS :) إذا لم تكن لن تواجه مشكلات مع الإعداد/الإدارة ، اذهب إلى SQLite.بنيت في RDBMS مع دعم SQL الكامل.حتى أنه يسمح لك بتخزين أي نوع من البيانات في أي عمود.

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

حول البحث عن النص الكامل:يحتوي SQLite على وحدات للبحث عن النص الكامل أيضًا.

ما عليك سوى الاستمتاع بواجهة قياسية لطيفة لبياناتك :)

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

لدى Hadoop أيضًا تطبيق نظام ملفات جوجل دعا نظام الملفات الموزعة Hadoop.

أوصي بشدة بـ Lua كبديل لتخزين البيانات من نوع SQLite.

لأن:

  • تم تصميم اللغة كلغة وصف بيانات في البداية
  • بناء الجملة قابل للقراءة من قبل الإنسان (XML هو لا)
  • يمكن للمرء تجميع قطع Lua إلى ثنائي، للحصول على أداء إضافي

هذا هو خيار "مجموعة اللغة الأصلية" للإجابة المقبولة.إذا كنت تستخدم C/C++ كمستوى التطبيق، فمن المعقول تمامًا استخدام محرك Lua (100 كيلو بايت من الملف الثنائي) فقط من أجل قراءة التكوينات/البيانات أو كتابتها.

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