ما هي أفضل طريقة لحفظ واسترجاع الملفات الثنائية باستخدام Oracle 10g؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا على وشك تنفيذ ميزة في تطبيقنا تتيح للمستخدم "تحميل" مستند PDF أو Microsoft PowerPoint، والذي سيوفره التطبيق بعد ذلك للمستخدمين الآخرين في العارض (حتى لا يتمكنوا من "التنزيل" بالمعنى "حفظ باسم ..").

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

أعلم أن هناك طريقة لإنشاء كائن "دليل" في Oracle، ولكن هل هناك طريقة لاستخدام هذه الميزة لتخزين واسترداد الملفات الثنائية المحفوظة في مكان آخر على خادم قاعدة البيانات؟

أم أنني أشعر بجنون العظمة بشكل مفرط بشأن حجم قاعدة البيانات؟

(للحصول على اكتمال تطبيقنا هو .Net WinForms باستخدام برامج تشغيل CoreLab / DevArt OraDirect.Net لأوراكل 10 جرام)

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

المحلول

زوجان من الخيارات:يمكنك وضع عمود BLOB في مساحة الجدول الخاصة به، مع خصائص التخزين الخاصة به؛يمكنك تخزين كائنات تخزين البيانات الكبيرة (BLOBs) في الجدول الخاص بها، المرتبط بالجدول الآخر بواسطة عمود المعرف.في كلتا الحالتين، كما اقترحت، يمكنك تعريف العمود باعتباره BFILE مما يعني أنه يتم تخزين الملف الفعلي خارجيًا من قاعدة البيانات في الدليل.ما قد يكون مصدر قلق هو أن BFILE LOBs لا تشارك في المعاملات ولا يمكن استردادها مع بقية قاعدة البيانات.

تمت مناقشة كل هذا في مرجع Oracle 10gR2 SQL، الفصل 2، بدءًا من الصفحة 23.

نصائح أخرى

أعتقد أن ذلك يعتمد على ما تعتبره كبيرًا جدًا.

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

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

لن يتمكن أحد من إعطائك إجابة بنعم أو لا على هذا السؤال.

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

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

قم بإنشاء Tablespace Binary_Data1 Datafile Some_san_Location STORACE STORAGESS (...)

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

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

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

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

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