"फाइलसिस्टम पर निर्भर करता है"
कुछ उपयोगकर्ताओं ने उल्लेख किया कि प्रदर्शन प्रभाव प्रयुक्त फाइल सिस्टम पर निर्भर करता है। बेशक। EXT3 जैसे फाइलसिस्टम बहुत धीमे हो सकते हैं। लेकिन यहां तक कि अगर आप EXT4 या XFS का उपयोग करते हैं, तो आप उस फ़ोल्डर को एक बाहरी कनेक्शन के माध्यम से ls
या find
FTP के माध्यम से सूचीबद्ध करने से रोक नहीं सकते हैं जैसे कि एफ़टीपी धीमा हो जाएगा।
समाधान
मैं @armandino की तरह ही पसंद करता हूं । उसके लिए मैं PHP में इस छोटे से फ़ंक्शन का उपयोग आईडी को एक फ़ाइलपथ में बदलने के लिए करता हूं, जिसके परिणामस्वरूप प्रति निर्देशिका 1000 फाइलें होती हैं:
function dynamic_path($int) {
// 1000 = 1000 files per dir
// 10000 = 10000 files per dir
// 2 = 100 dirs per dir
// 3 = 1000 dirs per dir
return implode('/', str_split(intval($int / 1000), 2)) . '/';
}
या यदि आप अल्फा-न्यूमेरिक वर्णों का उपयोग करना चाहते हैं, तो आप दूसरे संस्करण का उपयोग कर सकते हैं:
function dynamic_path2($str) {
// 26 alpha + 10 num + 3 special chars (._-) = 39 combinations
// -1 = 39^2 = 1521 files per dir
// -2 = 39^3 = 59319 files per dir (if every combination exists)
$left = substr($str, 0, -1);
return implode('/', str_split($left ? $left : $str[0], 2)) . '/';
}
परिणाम:
<?php
$files = explode(',', '1.jpg,12.jpg,123.jpg,999.jpg,1000.jpg,1234.jpg,1999.jpg,2000.jpg,12345.jpg,123456.jpg,1234567.jpg,12345678.jpg,123456789.jpg');
foreach ($files as $file) {
echo dynamic_path(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>
1/1.jpg
1/12.jpg
1/123.jpg
1/999.jpg
1/1000.jpg
2/1234.jpg
2/1999.jpg
2/2000.jpg
13/12345.jpg
12/4/123456.jpg
12/35/1234567.jpg
12/34/6/12345678.jpg
12/34/57/123456789.jpg
<?php
$files = array_merge($files, explode(',', 'a.jpg,b.jpg,ab.jpg,abc.jpg,ddd.jpg,af_ff.jpg,abcd.jpg,akkk.jpg,bf.ff.jpg,abc-de.jpg,abcdef.jpg,abcdefg.jpg,abcdefgh.jpg,abcdefghi.jpg'));
foreach ($files as $file) {
echo dynamic_path2(basename($file, '.jpg')) . $file . PHP_EOL;
}
?>
1/1.jpg
1/12.jpg
12/123.jpg
99/999.jpg
10/0/1000.jpg
12/3/1234.jpg
19/9/1999.jpg
20/0/2000.jpg
12/34/12345.jpg
12/34/5/123456.jpg
12/34/56/1234567.jpg
12/34/56/7/12345678.jpg
12/34/56/78/123456789.jpg
a/a.jpg
b/b.jpg
a/ab.jpg
ab/abc.jpg
dd/ddd.jpg
af/_f/af_ff.jpg
ab/c/abcd.jpg
ak/k/akkk.jpg
bf/.f/bf.ff.jpg
ab/c-/d/abc-de.jpg
ab/cd/e/abcdef.jpg
ab/cd/ef/abcdefg.jpg
ab/cd/ef/g/abcdefgh.jpg
ab/cd/ef/gh/abcdefghi.jpg
जैसा कि आप देख सकते हैं $int
-version के लिए हर फ़ोल्डर में 1000 फाइलें और 99 तक 1000 फाइलें और 99 निर्देशिकाएं होती हैं ...
लेकिन यह मत भूलो कि कई निर्देशिकाओं में एक ही प्रदर्शन समस्याओं का कारण बनता है!
अंत में आपको सोचना चाहिए कि कुल फ़ाइलों की मात्रा को कैसे कम किया जाए। अपने लक्ष्य के आधार पर आप कई छोटे चित्रों जैसे अवतार, आइकन, स्माइली इत्यादि को संयोजित करने के लिए CSS स्प्राइट्स का उपयोग कर सकते हैं या यदि आप कई छोटी गैर-मीडिया फ़ाइलों का उपयोग करते हैं, तो उन्हें JSON प्रारूप में उदाहरण के रूप में संयोजित करने पर विचार करें। मेरे मामले में मेरे पास हजारों मिनी-कैश थे और आखिरकार मैंने उन्हें 10 के पैक में संयोजित करने का फैसला किया।