2011-08-26 47 views
9

मैं एक SQLite डेटाबेस में बड़ी मात्रा में रिकॉर्ड्स (लाखों में) डालने की कोशिश कर रहा हूं। डेटा को एक फ़ाइल स्ट्रीम (सी ++) से पढ़ा जाता है। यदि मैं एक एकल लेनदेन शुरू करता हूं, तो सभी प्रविष्टियों के प्रदर्शन करें और फिर लेनदेन करें, मुझे केवल मेरे डेटाबेस में डाले गए रिकॉर्ड्स का एक बहुत ही छोटा प्रतिशत मिलता है।एसक्यूएलएट लेनदेन सीमा की संख्या?

जो लोग डाले गए हैं वे यादृच्छिक प्रतीत होते हैं - मैं वास्तव में कोई भी पैटर्न नहीं देख सकता जिसके लिए लोग डाले जाते हैं और कौन से बाहर निकलते हैं। हालांकि, यदि मैं 2000 प्रविष्टियों की तरह कुछ करने के बाद फिर से लेनदेन शुरू करता हूं, तो मुझे यह समस्या नहीं है और सभी रिकॉर्ड डाले गए हैं, भले ही प्रक्रिया अधिक धीमी हो। तो ...

क्या एक लेनदेन के भीतर कितने आवेषण किए जा सकते हैं? क्या इस सीमा को बदलने का कोई तरीका है?

+1

इस मुद्दे में भी मिला। बस इसे यहां पोस्टरिटी के लिए पोस्ट करेंगे। यदि आपको इसका सामना करना पड़ता है, तो पहले यह लेनदेन प्रति केवल 1k-2k प्रविष्टियों को बैच करने का प्रयास करना चाहिए ताकि यह वास्तव में समस्या हो। –

उत्तर

13

मैं बिना किसी समस्या के एक लेनदेन में 10 लाख पंक्तियां डालने में सक्षम हूं।

मेरे अनुमान:

  • आप एक ही बयान में बहुत अधिक पंक्तियाँ डालने और एक अभिव्यक्ति ट्री सीमा की अधिकतम गहराई तक पहुंच गए हैं। इसे पूरी तरह बंद कर दिया जा सकता है।
  • आप मूल्यों को बाध्य किए बिना अत्यधिक SQL INSERT का उपयोग कर रहे हैं और एक SQL स्टेटमेंट सीमा की अधिकतम लंबाई मार रहे हैं। इस मामले में, पैरामीटर बाध्यकारी का उपयोग करें।
  • यह पुस्तकालय में एक बग हो सकता है चेक Limits In SQLite (आप त्रुटि कोड के लिए हर एपीआई वापसी की जाँच कर रहे हैं?)

। यदि आप दिखाते हैं कि कोड में INSERT को कैसे तैयार और निष्पादित करते हैं, तो यह आपकी सहायता कर सकता है।

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