2010-01-05 7 views
8

मुझे एक postgreSQL डेटाबेस का उपयोग करने की आवश्यकता है और यह मेरे वर्तमान उपयोग berkeleyDB को प्रतिस्थापित करेगा। हालांकि, मुझे एहसास है कि यह एक आदर्श स्थिति नहीं है, यह मेरे नियंत्रण से बाहर है।एक पोस्टग्रेएसक्यूएल डेटाबेस को एक साधारण कुंजी मूल्य स्टोर के रूप में उपयोग करने का सबसे अच्छा तरीका

तो प्रश्न यह है कि ... यदि आपको पोस्टग्रेएसक्यूएल को एक महत्वपूर्ण मूल्य स्टोर में बनाना आवश्यक था, तो आप इसे यथासंभव कुशल बनाते समय ऐसा करने के लिए कैसे जाएंगे?

मेरे मान बाइट एरे हैं और मेरी कुंजी स्ट्रिंग हैं, मैं इन तारों की लंबाई पर कुछ प्रतिबंध लगा सकता हूं।

मुझे लगता है कि मुझे अपने मूल्य और प्राथमिक कुंजी कॉलम के लिए एक ब्लॉब का उपयोग करना चाहिए, लेकिन जैसा कि मैं इस यात्रा में बस रहा हूं, मैं उत्सुक हूं कि स्टैक ओवरफ्लो समुदाय में किसी ने भी ऐसा किया है, या यदि कोई है विशिष्ट 'गॉथचास' मुझे देखना चाहिए।

+0

क्या उन बाइट सरणियों वास्तव में प्रतिनिधित्व करता है:
यहाँ दस्तावेज़ पेज है? फाइल सामग्री? Serialized वस्तुओं? अन्य लोग? – BalusC

+0

वे वास्तव में सर्वर पर भेजे गए क्रियालेखन ऑब्जेक्ट्स को क्रमबद्ध कर रहे हैं ... लेकिन सर्वर कोड उन चीज़ों को नहीं जानता या उनकी परवाह नहीं करता है। और हाँ, मैं मानता हूं कि यह कुछ हद तक बेतुका है, एक महत्वपूर्ण मूल्य स्टोर के रूप में एक रिलेशनल डेटाबेस का उपयोग करने के लिए। लेकिन डेटाबेस का उपयोग करने के कुछ फायदे अभी भी बनाए रखा गया है, जैसे कुशल फ़ाइल io, एन्क्रिप्शन, उपयोगकर्ता पहुंच प्रतिबंध, आदि ... तो क्या यह वास्तव में पागल है? – dennisjtaylor

+0

हां। http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/ –

उत्तर

18

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

http://www.postgresql.org/docs/9.1/static/hstore.html

+3

यह सही उत्तर है ... – AlexCode

+1

यहां विस्तार को लोड करने का तरीका बताया गया है। आपको एक डीबीए या सुपरसियर होना होगा। एक्सटेन्शन एचएसटीओआर बनाएं; – Stradas

0

आपको मूल्य के रूप में स्टोर करने की क्या ज़रूरत है? स्ट्रिंग्स? चींटियों ऑब्जेक्ट्स (उदा। सीरियलाइज्ड जावा ऑब्जेक्ट्स)। एक साधारण कार्यान्वयन एक 3 कॉलम तालिका की तरह लग रही के साथ काम करेगा:

NAME(VARCHAR) TYPE(VARCHAR) VALUE(VARCHAR) 

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

वैकल्पिक रूप से (और शायद अधिक बेहतर विचार), क्या आपने Apache Commons Configuration देखा है? आपको लगता है कि बैकअप ले सकते हैं एक डाटाबेस के साथ (JDBC के माध्यम से) और आप गुण ऐसा है कि आप उन्हें इस प्रकार पुनः प्राप्त स्टोर कर सकते हैं:

// get a property called 'number' 
Double double = config.getDouble("number"); 
Integer integer = config.getInteger("number"); 

कि तुम कार्यान्वयन के मामले में दु: ख का एक बहुत बचाने के लिए कर सकते हैं। आप को बाइनरी डेटा सहेजने में कोई समस्या है, जिसमें आपको सम्मिलन और पोस्ट-पुनर्प्राप्ति से पहले इसे क्रमबद्ध करना होगा। लेकिन मैंने अतीत में इनस्ट्स, डबल्स और सीरियलाइज्ड जावा ऑब्जेक्ट्स को XStream के माध्यम से संग्रहीत करने के लिए उपयोग किया है, इसलिए मैं पुष्टि कर सकता हूं कि यह अच्छी तरह से काम करता है।

0

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

दूसरे शब्दों में हो जाएगा, और जानकारी की आवश्यकता वास्तव में आप एक अच्छा जवाब :)

2

आप संबंधपरक डेटाबेस का उपयोग करने के लिए मजबूर कर रहे हैं, मैं करने के लिए सुझाव है कि देने के लिए इस तथ्य का लाभ उठाने के लिए अपने डेटा में संरचना को खोजने का प्रयास करें, क्योंकि आपने बिना किसी संरचित डेटा और कुंजी-मूल्य स्टोर के साथ प्राप्त गति का लाभ उठाया है। आपको जितनी अधिक संरचना मिलती है, उतना बेहतर लाभ आप अपने परिस्थिति से बाहर निकलते हैं। भले ही आपको केवल चाबियों में संरचना मिलती है।

यह भी विचार करें कि आपको केवल अपने डेटा के लिए अनुक्रमिक या यादृच्छिक पहुंच की आवश्यकता होगी और इस आवश्यकता से आपके डेटाबेस को किस अनुपात में और संरचना करें। क्या आप उदाहरण के लिए टाइप करके अपने मूल्यों पर प्रश्न पूछेंगे? उन प्रश्नों में से प्रत्येक पर प्रभाव पड़ सकता है कि आप अपने डेटाबेस को कैसे बनाते हैं।

पोस्टग्रेस्क्ल में ब्लॉब्स के बारे में एक विशिष्ट विचार उन्हें आंतरिक रूप से pg_largetable (loid: oid, pageno: int4, डेटा: बाइटा) के रूप में दर्शाया जाता है। खंडों का आकार LOBBLKSIZE द्वारा परिभाषित किया गया है, लेकिन आमतौर पर 2k। तो यदि आप ब्लॉब्स के बजाय अपनी तालिका में बाइट एरे का उपयोग कर सकते हैं और ब्लॉजिज़ के तहत अपने मूल्य/कुंजी जोड़ी के आकार को सीमित कर सकते हैं, तो आप दूसरी तालिका के माध्यम से इस संकेत से बच सकते हैं। यदि आपके पास डेटाबेस की कॉन्फ़िगरेशन तक पहुंच है तो आप ब्लॉक आकार भी बढ़ा सकते हैं।

मैं डेटा एक्सेस में डेटा और पैटर्न में संरचना की तलाश करने के लिए सुझाव देना चाहता हूं और फिर अपने प्रश्न को फिर से विस्तार से पूछूंगा।

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

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