Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

फ़ाइल सिस्टम पर उपयोगकर्ता द्वारा अपलोड की गई छवियों को प्रभावी ढंग से संग्रहीत करना

हमारे पास 30,000+ फ़ाइलों और अब तक 20+ जीबी के साथ भारी उत्पादन में ऐसा सिस्टम है...

   Column    |            Type             |                        Modifiers                         
-------------+-----------------------------+----------------------------------------------------------
 File_ID     | integer                     | not null default nextval('"ACRM"."File_pseq"'::regclass)
 CreateDate  | timestamp(6) with time zone | not null default now()
 FileName    | character varying(255)      | not null default NULL::character varying
 ContentType | character varying(128)      | not null default NULL::character varying
 Size        | integer                     | not null
 Hash        | character varying(40)       | not null
Indexes:
    "File_pkey" PRIMARY KEY, btree ("File_ID")

फ़ाइलों को फ़ाइल के नाम के रूप में पूर्णांक File_ID के साथ केवल एक निर्देशिका में संग्रहीत किया जाता है। हम बिना किसी समस्या के 30,000 से अधिक हैं। मैंने बिना किसी समस्या के उच्च परीक्षण किया है।

यह फ़ाइल सिस्टम के रूप में ext3 के साथ RHEL 5 x86_64 का उपयोग कर रहा है।

क्या मैं इसे फिर से इस तरह से करूंगा? नहीं। मुझे एक नया स्वरूप पर कुछ विचार साझा करने दें।

  1. डेटाबेस अभी भी फाइलों पर जानकारी का "मास्टर स्रोत" है।

  2. प्रत्येक फ़ाइल sha1() हैश के आधार पर फ़ाइल सिस्टम पदानुक्रम में हैश और संग्रहीत है:/FileData/ab/cd/abcd4548293827394723984723432987.jpg

  3. डेटाबेस प्रत्येक फ़ाइल पर मेटा-सूचना संग्रहीत करने के बारे में थोड़ा अधिक स्मार्ट है। यह तीन टेबल वाला सिस्टम होगा:

    File :नाम, दिनांक, आईपी, स्वामी, और एक ब्लॉब (sha1) के लिए एक सूचक जैसी जानकारी संग्रहीत करता है
    File_Meta :फ़ाइल के प्रकार के आधार पर फ़ाइल पर कुंजी/मान जोड़े संग्रहीत करता है। इसमें Image_Width, आदि जैसी जानकारी शामिल हो सकती है...
    Blob :sha1 का संदर्भ उसके आकार के साथ संग्रहीत करता है।

यह सिस्टम हैश द्वारा संदर्भित डेटा को संग्रहीत करके फ़ाइल सामग्री को डी-डुप्लिकेट करेगा (एकाधिक फ़ाइलें एक ही फ़ाइल डेटा को संदर्भित कर सकती हैं)। rsync का उपयोग करके फ़ाइल डेटाबेस को बैकअप सिंक करना बहुत आसान होगा।

साथ ही, बहुत सारी फाइलों वाली किसी निर्देशिका की सीमाएं समाप्त कर दी जाएंगी।

फ़ाइल एक्सटेंशन को अद्वितीय फ़ाइल हैश के भाग के रूप में संग्रहीत किया जाएगा। उदाहरण के लिए, यदि किसी खाली फ़ाइल का हैश abcd8765 . था ... एक खाली .txt फ़ाइल और खाली .php फ़ाइल उसी हैश को संदर्भित करेगी। बल्कि, उन्हें abcd8765.php . का संदर्भ लेना चाहिए और abcd8765.txt . क्यों?

फ़ाइल एक्सटेंशन के आधार पर सामग्री प्रकार और कैशिंग नियमों को स्वचालित रूप से चुनने के लिए अपाचे, आदि को कॉन्फ़िगर किया जा सकता है। फ़ाइलों को एक वैध नाम और एक्सटेंशन के साथ संग्रहीत करना महत्वपूर्ण है जो फ़ाइल की सामग्री को दर्शाता है।

आप देखें, यह प्रणाली वास्तव में nginx के माध्यम से फ़ाइल वितरण को प्रत्यायोजित करके प्रदर्शन को बढ़ावा दे सकती है। देखें http://wiki.nginx.org/XSendfile

मुझे उम्मीद है कि यह किसी तरह मदद करता है। ध्यान रखना।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में FORCE INDEX - मैं इसे कहाँ रखूँ?

  2. अक्षांश देशांतर पर आधारित त्रिज्या खोज करने के लिए SQL क्वेरी

  3. MySQL पर एक साथ कई रिकॉर्ड्स को कैसे डिलीट करें?

  4. उपयोगकर्ता ''@'लोकलहोस्ट'' के लिए प्रवेश निषेध (पासवर्ड का प्रयोग:नहीं)

  5. MySQL दिए गए क्रम में WHERE का चयन करें