मैं कई हज़ार सेंसर से रीडिंग एकत्र कर रहा हूं और उन्हें एक MySQL डेटाबेस में संग्रहीत कर रहा हूं। प्रति सेकंड कई सौ आवेषण हैं। सम्मिलित प्रदर्शन को बेहतर बनाने के लिए मैं शुरुआत में मानों को एक मेमरी बफर तालिका में संग्रहीत कर रहा हूं। एक बार एक मिनट में मैं एक संग्रहीत प्रक्रिया चलाता हूं जो मेमोरी बफर से स्थायी तालिका में डाली गई पंक्तियों को स्थानांतरित करता है।परमाणु रूप से एक टेबल से दूसरे टेबल पर पंक्तियों को कैसे स्थानांतरित करें?
मूल रूप से मैं अस्थायी बफर से पंक्तियों को स्थानांतरित करने के लिए अपने संग्रहीत प्रक्रिया में निम्नलिखित करना चाहते हैं: क्योंकि डेटा संग्रह की प्रक्रिया "data_buffer" में अतिरिक्त पंक्तियां सम्मिलित
INSERT INTO data SELECT * FROM data_buffer;
DELETE FROM data_buffer;
दुर्भाग्य से पिछले प्रयोग करने योग्य नहीं है INSERT के बीच और ऊपर हटाना। इस प्रकार उन पंक्तियों को "डेटा" तालिका में डाले बिना हटा दिया जाएगा।
मैं ऑपरेशन परमाणु कैसे बना सकता हूं या केवल पंक्तियों को हटाने के लिए डिलीट स्टेटमेंट बना सकता हूं जो पिछले कथन में चुने गए थे और इनसेरेट किए गए थे?
मैं इसे मानक तरीके से करना पसंद करूंगा जो संभवतः विभिन्न डेटाबेस इंजनों पर काम करता है।
मैं प्रदर्शन ओवरहेड और स्टोरेज आवश्यकताओं के कारण कोई अतिरिक्त "आईडी" कॉलम नहीं जोड़ना पसंद करूंगा।
काश SELECT_AND_DELETE या मानक SQL या कुछ इसी तरह में ले जाने के बयान था ...
क्या आप data_buffer तालिका की संरचना प्रदान कर सकते हैं? –
ज़रूर: 'टेबल बनाएं data_buffer' ( ' time' पूर्णांक (11) नहीं NULL, 'sensor' SMALLINT (6) नहीं NULL, ' मान' नाव नहीं NULL ) इंजन = स्मृति डिफ़ॉल्ट charset = latin1; – snap
मेरे पास वास्तव में एक MySQL विशिष्ट समाधान है लेकिन ऐसा लगता है कि मुझे इसे 8 घंटे बीतने से पहले उत्तर अनुभाग में पोस्ट करने की अनुमति नहीं है। मैं वास्तव में stackoverflow में इन सीमाओं से नफरत करता हूं ... – snap