मुझे पोस्टग्रेज में UUID को कैसे अनुक्रमित करना चाहिए?


26

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

SP-GiST ऑपरेटर परिवार "text_ops" एक ट्राइ का उपयोग करके अनुक्रमित करता है। क्योंकि UUIDs काफी लंबे और बहुत ही असंतुष्ट होते हैं, ये आवाज मुझे भले ही कभी भी पूरी मैच सर्च करने की अपील करती हो।

एक हैश विकल्प भी है। हाशिंग ओ (1) है, और मुझे कोर्स की समानता के अलावा किसी भी तरह की तुलना करने की आवश्यकता नहीं होगी, लेकिन क्योंकि यूयूआईडी काफी लंबे हैं, मुझे डर है कि उनसे हैश उत्पन्न करने में बहुत समय बर्बाद होगा।

या यह कुछ ऐसा है जो सिस्टम और उपयोग की बारीकियों पर बहुत अधिक निर्भर करता है?

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


2
मेरा मानना ​​है कि "फ़ेडरेटेड डेटाबेस" आपकी स्थिति का मूलमंत्र है। और, हां, यूयूआईडी इसके लिए समाधान हैं। UUIDs का आविष्कार दशकों पहले किया गया था: केंद्रीय समन्वय के बिना वितरित प्रणालियों के बीच डेटा साझा करने के लिए यह बहुत ही कारण था।
बेसिल बॉर्क

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

जवाबों:


31

PostgreSQL के अंतर्निहित uuidडेटा प्रकार का उपयोग करें , और उस पर एक नियमित बी-ट्री इंडेक्स बनाएं

कुछ खास करने की जरूरत नहीं है। यह एक इष्टतम सूचकांक में परिणाम देगा, और uuidवर्तमान में व्यावहारिक रूप में कॉम्पैक्ट रूप में फ़ील्ड को संग्रहीत भी करेगा ।

(संस्करण 10 से पहले PostgreSQL में हैश इंडेक्स क्रैश-सुरक्षित नहीं थे और वास्तव में एक ऐतिहासिक अवशेष थे, जो किसी भी तरह एक बी-ट्री से बेहतर प्रदर्शन करने के लिए नहीं थे। उनसे बचें। पोस्टग्रैसीक्यू 10 पर वे दुर्घटनाग्रस्त हो गए थे और कुछ था प्रदर्शन में सुधार किए गए ताकि आप उन पर विचार करना चाहें।)

यदि किसी कारण से आप uuidप्रकार का उपयोग नहीं कर सकते हैं , तो आप आम तौर पर टेक्स्ट प्रतिनिधित्व पर एक बी-ट्री बनाएंगे या, अधिमानतः, byteaयूआईडी का प्रतिनिधित्व करेंगे।


2
हालांकि hashअनुक्रमणिका बनाम के बारे में बयान b-treeआमतौर पर आयोजित विश्वास है, मुझे लगता है कि इस तरह के दावे के लिए स्रोतों का हवाला देना मददगार होगा।
वोल्ट

1
PostgreSQL 10 के रूप में, hashअनुक्रमित अब दुर्घटना-सुरक्षित हैं। उस ने कहा, hashअनुक्रमित के साथ ही इस्तेमाल किया जा सकता है =, इसलिए यदि आपको किसी अन्य ऑपरेटर की आवश्यकता है, तो b-treeअभी भी बेहतर है।
14

1
कुछ वर्षों के बाद, मेरे अनुभव में, पोस्टग्रेज में भी 10 hashसे अधिक तेजी से नहीं हुआ है b-tree। लेकिन चूंकि हैश इंडेक्स बी-ट्री की तुलना में बहुत कम डिस्क स्थान लेते हैं, इसलिए यह सेटअप में तेज हो सकता है जहां बड़े इंडेक्स बन जाते हैं। समस्या, जो मुझे लगता है कि मेरे लिए ऐसा नहीं है। खैर अब मैं इस बात पर नज़र रखूंगा कि मैं वास्तव में v10 में उन्हें सुरक्षित रूप से उपयोग कर सकता हूं।
सूदो

V10 और v11 में हैश इंडेक्स परफ़ॉर्म इम्प्रूवमेंट पर कुछ अच्छे राइट अप हैं: rhaas.blogspot.com/2017/09/… - amitkapila16.blogspot.com/2017/03/…
ग्लेन मॉर्टन

3

PostgreSQL में हैश इंडेक्स कार्रवाई में गायब हैं। PostgreSQL जानता है कि इसे हैश इंडेक्स की जरूरत है, और यह हैश इंडेक्स के लिए कोड पुराना और ढाला है, लेकिन वे इसे नहीं हटाते क्योंकि वे किसी के साथ आने का इंतजार कर रहे हैं और हैश इंडेक्सिंग को ओवरहाल करते हैं। देखें यह धागा:

http://www.postgresql.org/message-id/4407.1115698257@sss.pgh.pa.us


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

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

2
किसी ने हैश इंडेक्स को बचाया है, मैं अनुमान लगा रहा हूं क्योंकि वे डेटा विभाजन में महत्वपूर्ण भूमिका निभाते हैं, जो Pg10 पर ध्यान केंद्रित कर रहा है: wiki.postgresql.org/wiki/ ... लेकिन वे अभी भी आपको वह सब कुछ नहीं देते हैं जो आपने सैद्धांतिक रूप से देखा है। कॉलेज डेटाबेस कक्षा में उपयोगी;)
सूडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.