PostgreSQL तालिका के लिए कितना बड़ा है?


127

मैं अपनी कंपनी के लिए एक RoR परियोजना के लिए डिजाइन पर काम कर रहा हूं, और हमारी विकास टीम पहले से ही डिजाइन, विशेष रूप से डेटाबेस के बारे में थोड़ी बहस कर चुकी है।

हमारे पास एक मॉडल है जिसे Messageनिरंतर बनाए रखने की आवश्यकता है। यह आईडी के अलावा केवल तीन डीबी कॉलम के साथ एक बहुत छोटा मॉडल है, हालांकि जब हम उत्पादन में जाते हैं तो इन मॉडलों में से बहुत कुछ होगा। हम प्रति दिन 1,000,000 सम्मिलन को देख रहे हैं। मॉडल केवल उन पर दो विदेशी कुंजी द्वारा खोजे जाएंगे जिन्हें अनुक्रमित किया जा सकता है। साथ ही, मॉडल को कभी भी डिलीट नहीं करना पड़ता है, लेकिन तीन महीने का होने के बाद हमें उन्हें रखना नहीं है।

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


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

1
संबंधित प्रश्न यहाँ और यहाँ
एरविन ब्रान्डेसटेटर

5
हम 5+ टीबी पोस्टग्रेक्यूएल डेटाबेस में प्रति दिन लगभग 30 मिलियन संदेशों को संसाधित करते हैं, ठीक काम करते हैं।
फ्रैंक हेकेन

यह भी देखें stackoverflow.com/questions/3132444/…
rogerdpack

1
FYI करें, मैं आज postgresql.org/about को पढ़ रहा हूं और ध्यान दिया कि यह कहता है कि (सिद्धांत रूप में) एक तालिका में पंक्तियों की संख्या असीमित है।
अल चो

जवाबों:


115

प्रति तालिका पंक्तियाँ अपने आप में कोई समस्या नहीं होंगी।

तो मोटे तौर पर 90 दिनों के लिए प्रतिदिन 1 मिलियन पंक्तियों को बोलना 90 मिलियन पंक्तियों है। मुझे लगता है कि कोई कारण नहीं है कि Postgres उस से निपट नहीं सकते, जो आप कर रहे हैं, उसके सभी विवरणों को जाने बिना।

अपने डेटा वितरण के आधार पर आप अनुक्रमित, फ़िल्टर्ड अनुक्रमित, और तालिका विभाजन का उपयोग कर सकते हैं किसी चीज़ को गति देने के लिए एक बार जब आप देखते हैं कि आपके पास क्या प्रदर्शन समस्याएँ हो सकती हैं या नहीं। आपकी समस्या किसी अन्य RDMS पर समान होगी जिसे मैं जानता हूं। यदि आपको किसी डेटा की आवश्यकता के लिए केवल 3 महीने के डेटा डिज़ाइन की आवश्यकता है, तो आपको किसी और चीज़ की आवश्यकता नहीं है। इस तरह आपके पास टेबल पर डेटा की एक सुसंगत मात्रा होगी। आपका भाग्यशाली आप जानते हैं कि कितना डेटा मौजूद होगा, इसे अपने वॉल्यूम के लिए परीक्षण करें और देखें कि आपको क्या मिलता है। 90 मिलियन पंक्तियों के साथ एक तालिका का परीक्षण करना जितना आसान हो सकता है:

select x,1 as c2,2 as c3
from generate_series(1,90000000) x;

https://wiki.postgresql.org/wiki/FAQ

Limit   Value
Maximum Database Size       Unlimited
Maximum Table Size          32 TB
Maximum Row Size            1.6 TB
Maximum Field Size          1 GB
Maximum Rows per Table      Unlimited
Maximum Columns per Table   250 - 1600 depending on column types
Maximum Indexes per Table   Unlimited

19
मैं मानता हूँ कि 90 मिलियन पंक्तियाँ PostgreSQL के लिए कोई समस्या नहीं होंगी। लेकिन यह PostgreSQL के साथ ORM के लिए एक समस्या हो सकती है। (किसी भी dbms के साथ एक ORM, वास्तव में।)
माइक शेरिल 'कैट रिकॉल'

@ MikeSherrill'Catcall 'अच्छी बात है, मैं सिर्फ "कितना बड़ा एक PostgreSQL तालिका के लिए बड़ा है?" पर ध्यान केंद्रित किया था
कुबेरचुन

2
@ ओयो: क्योंकि ओआरएम आमतौर पर डेटा प्राप्त करने के लिए बहुत सारे प्रश्नों का उपयोग करते हैं जिन्हें केवल एक या दो के साथ वापस किया जा सकता है। ओपी रूबी ऑन रेल्स का उपयोग कर रहा है।
माइक शेरिल 'कैट रिकॉल'

39
यह थोड़ा देर से है, लेकिन मुझे लगता है कि बहुत सारे मामलों में (विशेषकर रेल / सक्रिय रिकॉर्ड के साथ) ORM को समीकरण से पूरी तरह से हटा देना और प्रदर्शन कारणों से क्वेरी करने के लिए एक कच्चे sql स्ट्रिंग लिखना आम है। अपने ORM को आपके लिए डेटा निर्णय लेने की अनुमति न दें! यह एक आवश्यक नहीं है एक गौण है।
स्टीफन थेरड

2
URL में उद्धृत URL के बारे में वर्तमान में इन सीमाओं को नहीं दिखाया गया है - किसी को भी पता है कि इसे कहां स्थानांतरित किया गया है?
छीना हुआ

58

> 100 मिलियन पंक्तियों के साथ एक टेबल पर अपने प्रश्नों को तेजी से बढ़ाने का एक और तरीका है कि आप अपने प्रश्नों में सबसे अधिक बार उपयोग किए जाने वाले सूचकांक पर तालिका को बंद कर दें। हमारे पास 218 मिलियन पंक्तियों के साथ एक तालिका है और 30X सुधार पाए हैं।

इसके अलावा, एक बहुत बड़ी तालिका के लिए, आपकी विदेशी कुंजियों पर एक इंडेक्स बनाना एक अच्छा विचार है।


> ऑफ आवर्स में इंडेक्स पर टेबल जो आपके प्रश्नों में सबसे अधिक बार उपयोग की जाती है .... क्या आप बता सकते हैं कि यह कैसे किया जाता है?
जासूसी

6
हाँ यहाँ एक कदम से कदम है उदाहरण: 1) मैं जिस तालिका का उल्लेख कर रहा हूँ उसे इस उदाहरण में निवेश कहा जाता है। 2) प्रश्नों में सबसे अधिक इस्तेमाल किया जाने वाला सूचकांक (बैंकिड, रिकॉर्ड_डेट) तो यहां आपके कदम से कदम है: 1) psql -c "ड्रॉप इंडेक्स इन्वेस्टमेंट_बैंकिड_रेक_डैट_आईडीएक्स;" dbname 2) psql -c "निवेश पर इंडेक्स इन्वेस्टमेंट_बैंकिड_rec_dt_idx (bankid, record_date);" 3) psql -c "क्लस्टर इनवेस्टमेंट_बैंकिड_rec_dt_idx निवेश पर;" 4) वैक्यूमडब -d ccbank -z -v -t इनवेस्टमेंट तो चरण एक और दो में हम इंडेक्स को गिरा देते हैं और इसे फिर से बनाते हैं।
जेम्स डोहर्टी

3
चरण 3 हम क्लस्टर बनाते हैं, यह मूल रूप से सूचकांक के भौतिक क्रम में DB तालिका डालता है, इसलिए जब postgresql एक क्वेरी करता है तो यह अगले पंक्तियों को सबसे अधिक संभावना को कैश करता है। चरण 4 हम डेटाबेस को क्वेरी प्लानर के लिए आंकड़े रीसेट करने के लिए वैक्यूम करते हैं
जेम्स डोहर्टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.