ما هي أفضل طريقة لتخزين ملفات الوسائط في قاعدة البيانات؟

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

سؤال

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

وفكرت أيضًا في إمكانية وجود "روابط" لتلك الملفات، لكن ربما يحمل هذا مشاكل أكثر من الحلول.أي تجربة في هذا الاتجاه سيكون موضع ترحيب :)

ملحوظة:قاعدة البيانات ستكون MySQL.

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

المحلول

وكل نظام أعرف أن يخزن عدد كبير من الملفات الكبيرة تخزينها خارجيا إلى قاعدة البيانات. قمت بتخزين كافة البيانات queryable للملف (العنوان، الفنان، طول، الخ) في قاعدة البيانات، جنبا إلى جنب مع مسار جزئي إلى الملف. عندما حان الوقت لاسترداد الملف، يمكنك استخراج مسار الملف وأرفقت بعض الجذر الملف (أو URL) لذلك، ويرجع ذلك.

وهكذا، وكنت قد عمود "الموقع"، مع مسار جزئي في ذلك، مثل "أ / ب / ج / 1000"، والتي ثم تعيين إلى: " HTTP: //myserver/files/a/b/c/1000.mp3 "

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

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

نصائح أخرى

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

http://www.dreamwerx.net/phpforum/؟id=1

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

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

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

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

وعلى سبيل المثال، إذا قمت بتخزين XYZ.Wav في C: \ MyProgram \ البيانات \ أصوات \ X \ المسار الكامل سيكون

C:\MyProgram\Data\Sounds\X\XYZ.Wav

ولكن كنت تخزين المسار واسم الملف أو في قاعدة البيانات على النحو التالي:

X\XYZ.Wav

وعلى صعيد آخر، في قاعدة البيانات أو في ملفات التكوين البرنامج الخاص بك، قم بتخزين مسار الجذر مثل SoundFilePath يساوي

وC: \ MyProgram \ البيانات \ صوتية \

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

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

مميزات استخدام قاعدة البيانات:

  • سهل الانضمام إلى ملفات الصوت مع بت البيانات الأخرى.
  • تجنب عمليات الإدخال/الإخراج الملفات التي تتجاوز أمان قاعدة البيانات.
  • لا حاجة لعمليات الفصل لحذف ملفات الصوت عند حذف سجلات قاعدة البيانات.

عيوب استخدام قاعدة البيانات:

  • انتفاخ قاعدة البيانات
  • يمكن أن تكون قواعد البيانات أكثر تكلفة من أنظمة الملفات

هل يمكن تخزينها كما النقط (أو LONGBLOBs) ومن ثم استرداد البيانات من عند تريد الوصول إليها في الواقع ملفات الوسائط.

أو

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

والحقيقة أنني أميل نحو الأسلوب الأخير. أنا لا أعرف كيف يتم ذلك بشكل عام في العالم، ولكن أظن أن كثيرين آخرين أن تفعل الشيء نفسه.

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

وأنا تخزين قبالة الطريق النسبي من كل ملف في DB جنبا إلى جنب مع غيرها من البيانات الوصفية حول الملفات. ويمكن بعد ذلك تغيير مسار قاعدة على الطاير إذا كنت بحاجة لنقل البيانات الفعلية إلى محرك أقراص آخر (سواء المحلية أو عبر مسار UNC).

وهذا هو كيف أفعل ذلك. أنا متأكد من أن البعض الآخر سيكون الأفكار أيضا.

بعض مزايا استخدام النقط لتخزين الملفات

  • خفض النفقات الإدارية - استخدم أداة واحدة للنسخ الاحتياطي/الاستعادة وما إلى ذلك
  • لا توجد إمكانية لأن تكون قاعدة البيانات ونظام الملفات غير متزامنتين
  • القدرة على المعاملات (إذا لزم الأمر)

بعض العيوب

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

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

على أية حال، لا تقلق، افعل ما يبدو الأفضل في ذلك الوقت.

توفر بعض قواعد البيانات خادم ويب مدمجًا لخدمة النقط.في وقت كتابة هذا التقرير، لم يكن MySQL كذلك.

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

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

وأفضل وسيلة لتخزين الملفات السمعية / البصرية، يمكنك استخدام أي التخزين الموزعة التي يمكن أن تكون محلية أو على سحابة.

https://min.io/

وللسحابة: AWS S3

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