عيوب وجود (يحتمل) الآلاف من الدلائل في الخادم بدلاً من قاعدة البيانات؟

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

سؤال

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

الذي أقصده:بدلاً من وجود قاعدة بيانات تخزن جدول مدونة، ثم تحتوي على صف يحتوي على "المؤلف" و"الرسالة" و"التاريخ"، أود بدلاً من ذلك:مجلد لمنشور محدد، ثم ملفات *.txt داخل هذا المجلد والتي تحتوي على "المؤلف" و"الرسالة" و"التاريخ" المخزنة فيها.

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

المحلول

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

هي الأمثل

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

يتم بناؤها

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

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

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

نصائح أخرى

انها حقا تعتمد على:

  • ما هو حجم الملف
  • ما هي متطلبات المتانة لديك؟
  • كم عدد التحديثات التي تقوم بها؟
  • ما هو نظام الملفات؟

ليس من الواضح أن MySQL ستكون أسرع:

فعلت مرة واحدة مثل هذه المقارنة ل صغير الكائن من أجل استخدامه كمخزن للجلسات CppCMS.مع فهرس واحد (مفتاح فقط) وفهرسين (المفتاح الأساسي والمهلة الثانوية).

File System:   XFS     ext3 
-----------------------------
Writes/s:      322     20,000

Data Base \  Indexes:    Key Only   Key+Timeout
-----------------------------------------------
Berkeley DB              34,400      1,450
Sqlite No Sync            4,600      3,400
Sqlite Delayed Commit    20,800     11,700

كما ترون، مع نظام الملفات Ext3 البسيط كان أسرع أو بنفس سرعة Sqlite3 تخزين البيانات لأنها لا تعطيك (D) من ACID.

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

تذكر أن قاعدة البيانات هي ليس دائما عنق الزجاجة للنظام

انسَ الإجابات الطويلة، إليك أبسط الأسباب التي تجعل تخزين البيانات في ملفات نصية فكرة سيئة:

  1. من شبه المستحيل الاستعلام. كيف يمكنك فرز مشاركات المدونة حسب التاريخ؟سيتعين عليك قراءة جميع الملفات ومقارنة تاريخها، أو الاحتفاظ بملف الفهرس الخاص بك (بشكل أساسي، كتابة نظام قاعدة البيانات الخاص بك.)

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

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

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

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

وأعتقد أن نموا في نموذج سيكون من الصعب القيام به في بنية المجلد من في DB.

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

وIIRC Fudforum استخدام ملف تخزين لأسباب سرعة، يمكن أن يكون أسرع كثيرا لانتزاع ملف من للبحث في مؤشر DB واسترجاع البيانات من DB وإرسالها إلى المستخدم. كنت التداول في واجهة الملفات مع واجهات DB وDB-المكتبات.

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

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

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

... ثم تريد البحث عن المشاركات التي كتبها المؤلف وتحصل على قراءة مليون الملفات بدلا من استعلام SQL بسيط ...

قواعد البيانات ليست أسرع.فكر في الأمر:في النهاية يقومون بتخزين البيانات في نظام الملفات أيضًا.لذا فإن السؤال عما إذا كانت قاعدة البيانات أسرع يعتمد بشدة على مسار الوصول.

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

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

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

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

  • الوصول إلى مجموعة من إدخالات الفهرس، من أجل
  • الوصول إلى مجموعة من صفوف الجدول (يقرأ نظام rdbms عادةً الكتل التي تحتوي على صفوف متعددة) من أجل
  • اختر صفًا واحدًا من الكتلة.

إذا نظرت إليها:لديك فهارس وصفوف إضافية في الذاكرة، مما يجعل التخزين المؤقت لديك غير فعال، من أين من المفترض أن يأتي تسريع قاعدة البيانات؟

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

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

أفهم من منشورك أنك لن تتبع أي خصائص ACID لقاعدة البيانات العلائقية..سيكون من الأفضل تكييف قواعد البيانات ذات القيمة الأساسية الأخرى (mongodb أو coutchdb أو hyphertable) بدلاً من تطبيق نظام الملفات الخاص بك.سيعطي أداء أفضل من الأساليب الحالية.

ملحوظة: وأنا لست متخصصاً في هذا أيضاً..لقد بدأت للتو العمل على MongoDB وتجد أنه مفيد في سيناريوهات مماثلة.أردت فقط المشاركة في حالة عدم علمك بهذه الأساليب

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