سؤال

بعد القراءة هذه, ، يبدو وكأنه فكرة رائعة لتخزين الملفات باستخدام SHA-1 للدليل.

ليس لدي أي فكرة عما يعنيه هذا ، كل ما أعرفه هو أن SHA-1 و MD5 هما خوارزميات التجزئة. إذا قمت بحساب تجزئة SHA-1 باستخدام هذا البرنامج النصي روبي, ، وأغير محتوى الملف (الذي يغير التجزئة) ، كيف أعرف أين يتم تخزين الملف بعد ذلك؟

سؤالي هو إذن ، ما هي أساسيات تنفيذ نظام تخزين SHA-1/الملفات؟

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

أنا فقط أفكر في كيفية إنشاء نظام لتخزين الملفات العامة مثل googledocs و flickr و youtube و dropbox ، وما إلى ذلك ، شيء يمكنك إعادة استخدامه في بيئات مختلفة (مثل التخزين PubMed مقالات الصحف أو كرامستر الواجبات المنزلية واختبارات ، أو مجرد صور مثل على Flickr). ربما كنت أتخزينها على Amazon EC2. فقط بعض الأنظمة حتى أتمكن من القول "هذا هو كيف سأقوم بنسبة 99 ٪ من الوقت في تخزين الملفات من الآن فصاعدًا" ، حتى أتمكن من التفكير في بناء طريقة صلبة/متسقة لتخزين الملفات والوصول إلى بعض المشكلات الحقيقية.

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

المحلول

بادئ ذي بدء ، إذا كانت محتويات الملفات تتغير ، فإن اسم الملف من نهج SHA-Digest ليس مناسبًا للغاية ، لأن اسم الملف في الملف في نظام الملفات يجب أن يتغير عندما تتغير محتويات الملف.


في الأساس تقوم أولاً بحساب Digest SHA-1 أو MD5 (= قيمة التجزئة) من محتويات الملف.

عندما يكون لديك هضم ، على سبيل المثال ، 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9, ، يمكنك إنشاء موقع ملف واسم ملف من The Digest. على سبيل المثال ، قمت بتقسيم الأحرف القليلة الأولى من بنية Digest إلى Directory وبقية الأحرف إلى اسم الملف. فمثلا:

 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9 => some/path/00/e4/f5/6c0de1c61fdb926e79e8a0a65bd12930c9.txt

وبهذه الطريقة ، تحتاج فقط إلى تخزين Digest SHA-1 للملف إلى قاعدة البيانات. يمكنك دائمًا معرفة الموقع الصحيح واسم الملف.

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

نصائح أخرى

الفكرة هي ليس لتغيير محتوى الملف ، ولكن اسمه (والمسار) ، باستخدام قيمة التجزئة.

سيكون تغيير المحتوى باستخدام التجزئة كارثية لأن التجزئة عادة لا يمكن عكسها.

لست متأكدًا من التحفيز لاستخدام أ التجزئة بدلاً من اسم الملف (أو حتى بدلاً من رقم عشوائي طويل) ، ولكن فيما يلي بعض مزايا Appraoch hash:

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

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

عند التفكير في الأمر ، إعادة قراءة الاستجابة المرجعية ، لا أرى حقًا ميزة تجزئة ، مقارنةً برقم عشوائي ...

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

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

لذلك تم تقشير بداية التجزئة لهيكل الدليل متعدد المستويات وتم استخدام بقية التجزئة لاسم ملف لـ JPG.

هذا له فائدة إضافية تتمثل في اكتشاف التحميلات المكررة.

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

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

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