PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज:पेजिनेशन के लिए टाइमस्टैम्प का उपयोग करना

मुझे टिप्पणियों से चीजों को मेरे उत्तर में फिर से लिखने दें। आप timestamp का उपयोग करना चाहते हैं integer . के बजाय टाइप करें सिर्फ इसलिए कि यह वही है जिसके लिए इसे डिजाइन किया गया था। टाइमस्टैम्प पूर्णांकों और timestamp . के बीच मैन्युअल रूप से रूपांतरण करना वस्तुएं सिर्फ एक दर्द है और आपको कुछ भी हासिल नहीं होता है। और आपको अंततः अधिक जटिल डेटाटाइम आधारित प्रश्नों के लिए इसकी आवश्यकता होगी।

पेजिनेशन के बारे में एक प्रश्न का उत्तर देने के लिए। आप बस एक प्रश्न करें

SELECT *
FROM table_name
WHERE created < lastTimestamp
ORDER BY created DESC
LIMIT 30

यदि यह पहली क्वेरी है तो आप lastTimestamp = '3000-01-01' सेट करें . अन्यथा आप lastTimestamp = last_query.last_row.created . सेट करते हैं ।

अनुकूलन

ध्यान दें कि यदि तालिका बड़ी है तो ORDER BY created DESC कुशल नहीं हो सकता है (विशेषकर यदि विभिन्न श्रेणियों के साथ समानांतर कहा जाता है)। इस मामले में आप चलती "टाइम विंडो" का उपयोग कर सकते हैं, उदाहरण के लिए:

SELECT *
FROM table_name
WHERE
    created < lastTimestamp
    AND created >= lastTimestamp - interval '1 day'

1 day अंतराल को मनमाने ढंग से चुना जाता है (इसे अपनी आवश्यकताओं के अनुसार ट्यून करें)। आप ऐप में परिणाम भी सॉर्ट कर सकते हैं।

यदि परिणाम खाली नहीं हैं तो आप (अपने ऐप में) अपडेट करते हैं

lastTimestamp = last_query.last_row.created

(यह मानते हुए कि आपने छँटाई कर ली है, अन्यथा आप min(last_query.row.created) लेते हैं )

यदि परिणाम खाली है तो आप lastTimestamp = lastTimestamp - interval '1 day' के साथ क्वेरी दोहराते हैं जब तक आप कुछ नहीं लाते। इसके अलावा आपको रोकना होगा अगर lastTimestamp कम हो जाता है, यानी जब यह कम होता है तो तालिका में कोई अन्य टाइमस्टैम्प (जिसे प्रीफेच किया जाना है)।

वह सब कुछ सम्मिलित करने के लिए कुछ मान्यताओं के तहत है:

  1. new_row.created >= any_row.created और
  2. new_row.created ~ current_time
  3. new_row.created . का वितरण कमोबेश एक समान है

अनुमान 1 सुनिश्चित करता है कि पृष्ठ पर अंक लगाना एक समान डेटा में परिणाम देता है जबकि धारणा 2 केवल डिफ़ॉल्ट 3000-01-01 के लिए आवश्यक है दिनांक। धारणा 3 यह सुनिश्चित करने के लिए है कि जब आपको कई खाली प्रश्न जारी करने हों तो आपके पास कोई बड़ा खाली अंतराल न हो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Linux पर PostgreSQL डेटाबेस डिफ़ॉल्ट स्थान

  2. PostgreSQL में क्वेरी ऑप्टिमाइज़ेशन। मूल बातें समझाएं - भाग 1

  3. जावा में अपवादों के साथ पोस्टग्रेज लेनदेन जारी रखें

  4. यदि मेरे ऐप में SSL सक्षम नहीं है, तो Azure में मेरे Postgres सर्वर से कनेक्शन क्यों विफल हो जाता है?

  5. PostgreSQL में नंबर कैसे फॉर्मेट करें