2017-09-14 39 views
5

अधिकांश कोड एक डाटाबेस के साथ dplyr उपयोग करने के लिए कैसे दिखा उदाहरण डेटाबेस कनेक्शन वस्तु बनाने शामिल:उपयोग dplyr

connStr <- "driver=driver;server=hostname;database=mydatabase;..." 
db <- DBI::dbConnect(odbc::odbc(), .connection_string=connStr) 

tbl <- tbl(db, "mytable") 
tbl %>% verb1 %>% verb2 %>% ... 

हालांकि, लगता है मैं एक db वस्तु बनाने को छोड़ देते हैं:

tbl <- tbl(DBI::dbConnect(odbc::odbc(), .connection_string=connStr), "mytable") 
tbl %>% verb1 %>% verb2 %>% ... 

क्या इसके कोई परिणाम हैं? क्या मैं डेटाबेस संसाधन/रिसाव स्मृति/आदि का उपयोग करूंगा?

मेरे पास दिमाग में डीबीएमएस एसक्यूएल सर्वर है, और ड्राइवर पैकेज ओडीबीसी है, अगर यह मायने रखता है।

+0

एकमात्र चीज जो दिमाग में आती है वह यह है कि यह कनेक्शन खुला छोड़ना बहुत आसान हो जाता है। यह आपके लिए एक गंभीर मुद्दा हो सकता है या नहीं भी हो सकता है। – Benjamin

उत्तर

2

नया DBI specs मान लें कि कॉलर dbConnect() के साथ आवंटित सभी कनेक्शन को dbDisconnect() पर संबंधित कॉल के साथ आवंटित करता है। ऐसा करने में विफलता केवल कचरा संग्रह (या आर सत्र के अंत) के दौरान कनेक्शन बंद कर देगी, इस प्रकार संसाधनों की मुक्ति में देरी हो सकती है, या यहां तक ​​कि कनेक्शन को रिसाव भी किया जा सकता है।

सटीक व्यवहार शामिल डीबीआई बैकएंड पर निर्भर करता है (इस मामले में ओडीबीसी पैकेज)। जिम हेस्टर, ODBC के मेंटेनर,

के अनुसार [यह] स्वचालित रूप से dbDisconnect() कॉल कनेक्शन वस्तु कचरा एकत्र है, इसलिए इस कनेक्शन लीक नहीं होगा। यदि आप बड़ी संख्या में कनेक्शन खोल रहे हैं तो यह स्पष्ट होना हमेशा सर्वोत्तम होता है, अगर आप इसे अंतःक्रियात्मक तरीके से कर रहे हैं तो शायद इस मामले में कचरा कलेक्टर पर भरोसा करना ठीक है।