PostgreSQL में BLOB या संदर्भ


11

मुझे PostgreSQL डेटाबेस में बाइनरी डेटा फ़ाइलों को संग्रहीत करने की आवश्यकता है जो एक उबंटू सर्वर पर चलती है। प्रारंभ में प्रत्येक में लगभग 250kb की कुछ दर्जन फाइलें होंगी। हालांकि, समय के साथ फाइलों की संख्या बढ़ती जाएगी। मुझे कई बार अन्य डाउनस्ट्रीम विश्लेषणों के लिए फाइलों से डेटा निकालने की आवश्यकता हो सकती है।

मैंने बाइनरी डेटा को BLOB या संदर्भ के रूप में संग्रहीत करने के आयु-पुराने प्रश्न के बारे में कुछ शोध किया है। दोनों के स्पष्ट रूप से अपने पक्ष और विपक्ष हैं। क्या PostgreSQL से संबंधित कोई विशेष समस्याएं हैं जिनके बारे में मुझे पता होना चाहिए? क्या एक तरीका या दूसरा बेहतर है अगर मैं फ़ाइलों से डेटा निकालना चाहता हूं, या तो पोस्टग्रेजक्यूएल फ़ंक्शन के माध्यम से या बाहरी पायथन प्रोग्राम के माध्यम से?

यदि मैं डेटाबेस में डेटा फ़ाइलों को सीधे स्टोर करने के लिए था, तो क्या उन्हें अन्य मुख्य क्षेत्रों वाली तालिका के बजाय "मुख्य" तालिका को संदर्भित करने वाली एक विदेशी कुंजी के साथ एक अलग तालिका में संग्रहीत करना बेहतर होगा?

मैंने यहाँ प्रश्न और उत्तर पढ़े हैं ; एक टिप्पणी से पता चलता है कि लिनक्स पर (फाइल सिस्टम में) संदर्भ द्वारा बाइनरी फ़ाइलों को संग्रहीत करना बेहतर है। यहाँ मेरे प्रश्न विशेष रूप से PostgreSQL से संबंधित हैं और विभिन्न विश्लेषणों के लिए फाइलों से डेटा निकालने के लिए।

अपडेट: इसी तरह का सवाल


PostgreSQl के साथ एक नियम सेट करना संभव है जो फ़ाइल सिस्टम में फ़ाइल को स्वचालित रूप से हटा देता है जब संदर्भ वाला रिकॉर्ड हटा दिया जाता है।
जेपी

मुझे यकीन है कि इस सवाल का एक से अधिक जवाब था। इसका क्या हुआ? क्या यह देखने का कोई तरीका है कि क्या पोस्टर ने इसे हटा दिया है? उस पर टिप्पणियों के बारे में क्या?
सब्रे वुल्फ

हां, मैंने इसे हटा दिया, क्योंकि मेरे द्वारा लिखे गए बाइट के साथ प्रदर्शन की समस्याओं से बचा जा सकता है। टिप्पणियों को संक्षेप में प्रस्तुत किया जा सकता है "बायटिया के साथ सबकुछ ठीक है, आपको बस यह सुनिश्चित करना चाहिए कि आप डेटाबेस में गैर-मुद्रण योग्य वर्णों से बच नहीं सकते हैं और फिर उन्हें अपने आवेदन में फिर से अन-एस्केप कर सकते हैं। जैसा कि araqnid ने टिप्पणी की है, आपको उसका उपयोग करना चाहिए। हेक्स बचना कि libpq द्वारा समर्थित है। "
jp

जवाबों:


9

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

डेटाबेस के बाहर बड़ी बाइनरी ऑब्जेक्ट्स को संग्रहीत करने के मुख्य कारण यह होंगे कि यदि वे संतोषजनक समय में स्टोर करने और उन्हें पुनर्प्राप्त करने में सक्षम होने के लिए बहुत बड़े हैं, यदि वे डेटाबेस को व्यावहारिकता से आगे बढ़ाते हैं, या यदि आपको फ़ाइलों को फ़ाइलों से एक्सेस करने की आवश्यकता है एक अलग आवेदन। वहां कोई भी लागू नहीं होता है, जहां तक ​​मैं बता सकता हूं।


विवरण के लिए धन्यवाद। एक अलग एप्लिकेशन से फाइलों तक पहुंचने के बारे में आपकी बात ने मुझे एहसास दिलाया कि मैं भविष्य में उपयोगकर्ताओं को अपनी मशीन पर स्थानीय रूप से उपयोग करने के लिए बाइनरी फ़ाइल डाउनलोड करने की अनुमति देना चाहता हूं। अगर डेटाबेस में फाइल स्टोर की जाती है तो क्या ऐसा किया जा सकता है?
सबेरेवॉल्फी

ज़रूर। इसके लिए व्यवस्था करने के लिए आपको एक छोटा सा कोड लिखना होगा (डेटाबेस से फ़ाइल डेटा प्राप्त करना, HTTP डाउनलोड, कहना) की व्यवस्था करना, लेकिन यह अवरोधक नहीं है।
पीटर आइसेनट्राट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.