2012-06-17 5 views
6

मेरा ActiveRecord मॉडल यूयूआईडी-आधारित प्राथमिक कुंजी का उपयोग करता है, और मैं एक समय में 1000 रिकॉर्ड लोड करने के लिए find_in_batches का उपयोग करना चाहता हूं। हालांकि, documentation देखकर, यह कहता है कि यह केवल पूर्णांक-आधारित प्राथमिक कुंजी के साथ काम करता है। मैं कोड के माध्यम से चला गया, और मैं इसे "primary_key ASC" द्वारा ऑर्डर रिकॉर्ड देखता हूं। यह गैर-पूर्णांक आधारित प्राथमिक कुंजी के साथ क्यों काम नहीं करता है? बस इस आदेश के कारण? मैंने इस विधि के साथ अपने मॉडल की कोशिश की, यह ठीक काम करता है।find_in_batches केवल पूर्णांक-आधारित प्राथमिक कुंजी के साथ काम करता है?

क्या कोई मुझे इस बारे में समझा सकता है?

उत्तर

7

मान लें कि दस्तावेज 100% सही नहीं है। यह वृद्धिशील प्राथमिक कुंजी के साथ सही ढंग से काम करता है। यदि आप गारंटी दे सकते हैं कि किसी भी नए रिकॉर्ड के यूआईआईडी तालिका में किसी मौजूदा रिकॉर्ड की कुंजी से अधिक होगी, तो यह सही तरीके से काम करेगा। अन्यथा, आपके पास बैच प्रोसेसिंग शुरू करने के बाद जोड़े गए नए रिकॉर्ड याद करने का मौका है।

आंतरिक रूप से, प्रत्येक चरण पर यह अंतिम रिकॉर्ड (last_id) की आईडी प्राप्त करता है और अगले चरण पर last_id से अधिक आईडी के साथ 1000 रिकॉर्ड का चयन करता है। तो यदि प्रसंस्करण चरण के दौरान एप्लिकेशन अद्वितीय आईडी < last_id के साथ नया रिकॉर्ड बनाता है, तो यह रिकॉर्ड प्रोसेसिंग से बाहर रखा जाएगा।

+0

हां, यह एक अच्छा स्पष्टीकरण है। मैंने नए रिकॉर्ड जोड़े जाने के बारे में नहीं सोचा था। – Chamnap

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