2011-10-09 13 views
8

mysql के साथ काम करते समय, डेटाबेस में BLOB के रूप में छवियों को संग्रहीत करना एक बुरा विचार है, क्योंकि यह डेटाबेस को काफी बड़ा बनाता है जो डेटाबेस के सामान्य उपयोग के लिए हानिकारक है। फिर, डिस्क पर छवि फ़ाइलों को सहेजना और डेटाबेस में उन्हें लिंक सहेजना बेहतर है।मोंगो डेटाबेस में छवि फ़ाइलों को संग्रहीत करना, क्या यह एक अच्छा विचार है?

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

क्या आपको लगता है कि सर्वर पर संग्रहीत फ़ाइलों की संख्या को कम करने के लिए मोंगोडीबी (ग्रिडएफएस के रूप में) पर छवि फ़ाइलों को सहेजना बेहतर है; या फिर भी डेटाबेस को जितना संभव हो उतना छोटा रखना बेहतर है?

उत्तर

10

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

फाइल सिस्टम में बड़ी फ़ाइलों को संग्रहीत करने का नकारात्मक हिस्सा यह है कि वितरित करना बहुत कठिन है। डेटाबेस का उपयोग करना, और मोंगो के ग्रिडएफएस जैसे कुछ इसे स्केल करना संभव बनाता है। आपको बस यह सुनिश्चित करना होगा कि आप पूरी फ़ाइल को एप्लिकेशन की स्मृति में एक बार में कॉपी न करें, लेकिन एक समय में एक हिस्सा। अधिकांश वेब ऐप ढांचे के पास आजकल खंडित HTTP प्रतिक्रिया भेजने के लिए कुछ समर्थन है।

2

मोंगोडीबी के ग्रिडएफएस इस तरह के भंडारण के लिए डिज़ाइन किए गए हैं और कई अलग-अलग सर्वरों पर छवि फ़ाइलों को संग्रहीत करने के लिए काफी आसान है, जिससे सभी सर्वर उनका उपयोग कर सकते हैं।

5

उत्तर हाँ है। पुरानी गुफा-आदमी के दिनों में, सर्वरों में उत्परिवर्तनीय फ़ाइल सिस्टम थे जिन्हें आप बदल सकते थे। जब तक हमने चीजों को स्केल करने की कोशिश नहीं की तब तक यह बहुत अच्छा था।

गुफा लोग आजकल immutable deployments के साथ ऐप्स बनाते हैं। Heroku और Dokku इस के उदाहरण हैं। चूंकि वेब ऐप सर्वर में कोई राज्य नहीं है, इसलिए उन्हें आसानी से बनाया जा सकता है, अपग्रेड किया जा सकता है, स्केल किया जा सकता है और नष्ट कर दिया जा सकता है।

चूंकि हमारे पास अभी भी फाइलें हैं, इसलिए हमें उन्हें कहीं भी रखना होगा। कई समाधान हैं: एनएफएस, हमारा डेटाबेस, कोई एल्स डेटाबेस।

  • nfs एक 'नेटवर्क फ़ाइल सिस्टम' है जो आपको नेटवर्क संसाधनों पर फ़ाइल I/o करने देता है। यदि आप किसी भी तरह से नेटवर्क से निपट रहे हैं, तो IMHO यह अधिक मूल्य नहीं जोड़ता है जब तक कि आप पहले से ही जानते हैं।

  • हमारे डेटाबेस - MongoDB there are two options के लिए: (फ़ाइल> 16 एमबी)? ग्रिडएफएस: बिनडाटा

  • कोई भी एल्स डेटाबेस - कुछ Amazon S3 जैसे मूल हैं और कुछ क्लाउडिनरी या ड्रॉपबॉक्स जैसी अतिरिक्त सेवाएं प्रदान करते हैं।

यदि आप एक बड़ी बजट उद्यम टीम पर हैं और कोई सप्ताह में 40 घंटे खर्च करता है तो सर्वर का ख्याल रखना सुनिश्चित करें - फ़ाइल सिस्टम का उपयोग करें। यदि आप वेब ऐप्स बना रहे हैं जो स्केल करते हैं, तो डीबी में फ़ाइलों को समझना समझ में आता है।

आप प्रदर्शन के बारे में चिंतित हैं, तो:

1) एक प्रॉक्सी का उपयोग करना (जैसे nginx) या एक CDN ग्राहकों के लिए अपनी सामग्री को होस्ट करने के लिए। आपका सर्वर सिर्फ कैश मिस की सेवा कर रहा है।

2) स्ट्रीमिंग आईओ Nodeschool has a cool tutorial for Node.js का उपयोग करें।

0

किसी भी डीबी में एक अच्छा विचार भंडारण छवियों नहीं है, क्योंकि:

  • पढ़ने/एक डीबी को लिखने हमेशा एक फाइल सिस्टम
  • अपने DB बैकअप विशाल और अधिक समय में विकसित की तुलना में धीमी है लेने वाली फाइलों को
  • पहुंच को आपके एप्लिकेशन और डीबी परतों के माध्यम से जा रहा

पिछले दो असली हत्यारे हैं की आवश्यकता है।

स्रोत: Three things you should never put in your database

तो यदि आप अपना आवेदन तैयार कर सकते हैं, तो बेहतर है कि मोंगोडीबी पर अपनी तस्वीरों को अपलोड न करें।

हालांकि, यदि आप समय सीमा के करीब हैं ... और डेटाबेस इतना छोटा होगा कि यह बहुत बड़ा नहीं होगा और इसका आकार आपके आवेदन को चलाने वाली मशीन पर उपलब्ध RAM से अधिक कभी नहीं होगा, तो मुझे लगता है (उद्धृत आलेख के लेखक के विरोध में), आप छवियों को मोंगोडीबी में संग्रहीत करने पर विचार कर सकते हैं। यह बस सुविधाजनक, सुविधाजनक, कार्यान्वित करने के लिए त्वरित है और आपको कुछ लचीलापन देता है।

संबंधित मुद्दे

 संबंधित मुद्दे