अपडेट करें मेरे पास PostgresQL में एक बहुत बड़ी डेटाबेस तालिका है और "कॉपी" जैसे कॉलम हैं। प्रत्येक नई पंक्ति अनिश्चित हो जाती है और बाद में पृष्ठभूमि प्रोग्राम द्वारा दूसरी चीज़ में दोहराया जाएगा। उस तालिका पर आंशिक अनुक्रमणिका है "btree (आईडी) जहां replicated = 0"। पृष्ठभूमि प्रोग्राम अधिकांश 2000 प्रविष्टियों (LIMIT 2000) के लिए एक चयन करता है, उन पर काम करता है और फिर 2000 तैयार एसक्यूएल-कमांड का उपयोग करके एक लेनदेन में परिवर्तन करता है।बहुत बड़ी पोस्टग्रेएसक्यूएल डेटाबेस तालिका को कुशलतापूर्वक
अब समस्या यह है कि मैं उपयोगकर्ता को इस प्रतिकृति-मूल्य को रीसेट करने का विकल्प देना चाहता हूं, इसे फिर से शून्य बना दें।
एक अद्यतन तालिका सेट दोहराया = 0;
संभव नहीं है:
- यह बहुत ज्यादा समय
- लेता है यह MVCC
- यह एक लेन-देन में किया जाता है की वजह से तालिका के के आकार डुप्लिकेट: यह या तो विफल रहता है या के माध्यम से चला जाता है।
मुझे वास्तव में इस मामले के लिए लेनदेन-सुविधाओं की आवश्यकता नहीं है: यदि सिस्टम नीचे चला जाता है, तो यह केवल इसके कुछ हिस्सों को संसाधित करेगा।
कई अन्य समस्याओं: एक
update set replicated=0 where id >10000 and id<20000
कर भी बुरा है: यह सब पूरी तालिका जो बहुत धीमी है पर एक अनुक्रमिक स्कैन करता है। यदि यह ऐसा नहीं कर रहा था, तो यह अभी भी धीमा होगा क्योंकि यह बहुत अधिक मांग करेगा।
मुझे वास्तव में जो चाहिए वह सभी पंक्तियों के माध्यम से जाने, उन्हें बदलने और एक विशाल लेनदेन से बंधे होने का एक तरीका है।
अजीब, एक
UPDATE table
SET replicated=0
WHERE ID in (SELECT id from table WHERE replicated= LIMIT 10000)
भी धीमी है, हालांकि यह एक अच्छी बात होना चाहिए: डिस्क-क्रम में तालिका को ध्यान से ...
(कि उस मामले में वहाँ भी था नोट एक सूचकांक है कि इस कवर)
(MySQL की तरह एक अद्यतन LIMIT में PostgreSQL के लिए उपलब्ध नहीं)
BTW है: वास्तविक समस्या अधिक जटिल है और हम एक के बारे में बात कर रहे हैं यहां एम्बेडेड सिस्टम जो पहले से ही तैनात है, इसलिए रिमोट स्कीमा परिवर्तन मुश्किल हैं, लेकिन संभव है दुर्भाग्यवश यह पोस्टग्रेसक्यूएल 7.4 है।
मैं जिस पंक्तियों के बारे में बात कर रहा हूं वह है उदा। 90000000. डेटाबेस का आकार कई दर्जन गीगाबाइट हो सकता है।
डेटाबेस में केवल 5 टेबल हैं, एक बहुत बड़ा है। लेकिन यह खराब डिज़ाइन नहीं है, क्योंकि ये एम्बेडेड बॉक्स केवल एक प्रकार की इकाई के साथ काम करते हैं, यह एक ईआरपी-सिस्टम या ऐसा कुछ नहीं है!
कोई विचार?
यह एक बहुत अच्छा विचार है, हालांकि दुर्भाग्यवश दुर्भाग्यवश एक स्कीमा परिवर्तन (एक लम्बे समय से अद्यतन प्रक्रिया) की आवश्यकता है। मुझे इस दृष्टिकोण के बारे में वास्तव में क्या पसंद है यह वास्तव में, वर्तमान आंशिक सूचकांक आंतरिक रूप से इस विचार के समान ही है! केवल अधिक लचीला और प्रबंधनीय। – Christian