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

JDBC:क्या मैं एक मल्टीथ्रेडिंग ऐप में कनेक्शन साझा कर सकता हूं, और अच्छे लेनदेन का आनंद ले सकता हूं?

हां, सामान्य तौर पर आपको प्रत्येक थ्रेड के लिए एक नया कनेक्शन बनाने की आवश्यकता होती है। आपके पास इस पर नियंत्रण नहीं है कि ऑपरेटिंग सिस्टम थ्रेड्स के निष्पादन को कैसे समयबद्ध करता है (अपने स्वयं के महत्वपूर्ण अनुभागों को परिभाषित करने के बावजूद), इसलिए आप अनजाने में उस एक पाइप के नीचे डेटा भेजने की कोशिश कर रहे कई थ्रेड्स प्राप्त कर सकते हैं।

ध्यान दें कि यह किसी भी नेटवर्क संचार पर लागू होता है। उदाहरण के लिए, यदि आपके पास HTTP कनेक्शन के साथ एक सॉकेट साझा करने का प्रयास करने वाले दो धागे थे।

  • थ्रेड 1 एक अनुरोध करता है
  • थ्रेड 2 एक अनुरोध करता है
  • थ्रेड 1 सॉकेट से बाइट्स पढ़ता है, अनजाने में थ्रेड 2 के अनुरोध से प्रतिक्रिया पढ़ रहा है

यदि आपने अपने सभी लेन-देन को महत्वपूर्ण वर्गों में लपेट लिया है, और इसलिए संपूर्ण प्रारंभ/प्रतिबद्ध चक्र के लिए किसी अन्य थ्रेड को लॉक कर दिया है, तो आप थ्रेड के बीच डेटाबेस कनेक्शन साझा करने में सक्षम हो सकते हैं। लेकिन मैं तब भी ऐसा नहीं करूंगा, जब तक कि आपको वास्तव में JDBC प्रोटोकॉल का सहज ज्ञान न हो।

यदि आपके अधिकांश थ्रेड्स को डेटाबेस कनेक्शन (या बिल्कुल भी आवश्यकता नहीं) की आवश्यकता होती है, तो आप अपने डेटाबेस को काम करने के लिए एक थ्रेड को नामित करने में सक्षम हो सकते हैं, और अन्य थ्रेड्स उस एक थ्रेड के लिए उनके अनुरोधों को कतारबद्ध कर सकते हैं। यह इतने सारे कनेक्शनों के ओवरहेड को कम करेगा। लेकिन आपको यह पता लगाना होगा कि अपने परिवेश में प्रति थ्रेड कनेक्शन कैसे प्रबंधित करें (या StackOverflow पर इसके बारे में एक और विशिष्ट प्रश्न पूछें)।

अपडेट करें: टिप्पणी में आपके प्रश्न का उत्तर देने के लिए, अधिकांश डेटाबेस ब्रांड एक ही कनेक्शन पर एकाधिक समवर्ती लेनदेन का समर्थन नहीं करते हैं (इंटरबेस/फायरबर्ड एकमात्र अपवाद है जिसे मैं जानता हूं)।

एक अलग लेनदेन वस्तु होना अच्छा होगा, और प्रति कनेक्शन एकाधिक लेनदेन शुरू करने और करने में सक्षम होना अच्छा होगा। लेकिन विक्रेता बस इसका समर्थन नहीं करते हैं।

इसी तरह, मानक विक्रेता-स्वतंत्र एपीआई जैसे JDBC और ODBC एक ही धारणा बनाते हैं, कि लेन-देन की स्थिति केवल कनेक्शन ऑब्जेक्ट की एक संपत्ति है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल क्वेरी में डिफ़ॉल्ट मान के साथ कस्टम कॉलम कैसे जोड़ें?

  2. '2'> '10' क्यों है?

  3. डेटाबेस पोस्टग्रेज करने के लिए स्पार्क डेटाफ़्रेम लिखें

  4. SQLAlchemy इंजन का उपयोग किए बिना पोस्टग्रेज टेबल पर डेटा फ्रेम कैसे लिखें?

  5. मैं केकपीएचपी को सहेजने पर डेटा से बचने से कैसे रोक सकता हूं?