2010-07-19 19 views
8

मैं एक प्रक्रिया बनाने की कोशिश कर रहा हूं जो एक MySQL सर्वर (RODBC पैकेज का उपयोग करके) से डेटा निकालता है, आर में उस डेटा पर कुछ सांख्यिकीय दिनचर्या करता है, फिर जेनरेटेड प्लॉट को सर्वर पर वापस सहेजता है कि वे एक छोटे से PHP और वेब जादू के माध्यम से एक वेब ब्राउज़र में पुनर्प्राप्त किया जा सकता है।वेब प्लस को आर प्लॉट सहेजें

मेरी योजना एक एसक्यूएल डालने के लिए आरओडीबीसी पैकेज का उपयोग करके साजिश को एक MySQL BLOB फ़ील्ड में सहेजना है। मुझे लगता है कि मैं डेटा को एक स्ट्रिंग के रूप में सीधे सम्मिलित कर सकता हूं। समस्या यह है कि, मैं डेटा स्ट्रिंग कैसे प्राप्त करूं और यह भी काम करेगा? मेरा सबसे अच्छा विचार एक temp फ़ाइल को सहेजने के लिए savePlot फ़ंक्शन का उपयोग करना है और फिर किसी भी तरह इसे वापस पढ़ें।

किसी ने इस से पहले इस पर प्रयास करने के सुझाव दिए हैं या सुझाव दिए हैं?

+0

जबकि कभी भी आर का उपयोग नहीं किया जाता है, मुझे लगता है कि इसमें कुछ प्रकार की धारावाहिक सुविधा होगी ... – Wrikken

+0

धन्यवाद, अब मैं एक संभावित समाधान के रूप में serialize() फ़ंक्शन को देख रहा हूं। – stotastic

+1

क्या आप वाकई डेटाबेस में तस्वीर ब्लब्स चाहते हैं? मुझे नहीं लगता कि यह एक अच्छा विचार है, सामान्य रूप से ब्लॉब्स - डीबी में फाइलों और फाइलनामों के रूप में चित्र क्यों नहीं? – mbq

उत्तर

2

अगर आपको लगता है यह यहाँ एक भयानक विचार है, की परवाह किए बिना एक काम कर जवाब मैं इस post

## open connection 
library(RODBC) 
channel <- odbcConnect("") 

## generate a plot and save it to a temp file 
x <- rnorm(100,0,1) 
hist(x, col="light blue") 
savePlot("temp.jpg", type="jpeg") 

## read back in the temp file as binary 
plot_binary <- paste(readBin("temp.jpg", what="raw", n=1e6), collapse="") 

## insert it into a table 
sqlQuery(channel, paste("insert into test values (1, x'",plot_binary,"')", sep="")) 

## close connection 
odbcClose(channel) 

कार्यान्वयन से पहले से एक साथ टुकड़ा करने में सक्षम था है, मैं कुछ करने के लिए खोज आत्मा क्या करना सुनिश्चित करेंगे यह तय करें कि सर्वर फ़ाइल सिस्टम का उपयोग करने के बजाय इसका उपयोग किया जाना चाहिए या नहीं।

+0

आप यहाँ भयानक I/O ओवरहेड कर रहे हैं। यदि MySQL सर्वर वेब सर्वर के समान मशीन पर है, तो आपके 'savePlot()' कॉल को फ़ाइल को कहीं भी लिखना चाहिए जहां वेब सर्वर देख सकता है। अपाचे-स्पीच में, इसका मतलब है कि इसे कहीं भी DocumentRoot के अंतर्गत लिखना है, या एक निर्देशिका निर्देशिका के साथ दस्तावेज़ पेड़ में मैप की गई एक अलग निर्देशिका में। यदि दो मशीनें अलग हैं, तो आर स्क्रिप्ट वेब सर्वर पर चलनी चाहिए ताकि यह उसी नियमों के बाद स्थानीय रूप से फ़ाइल को लिख सके। किसी भी तरह से, छवि की सेवा करने वाला पृष्ठ फ़ाइल को स्थैतिक सामग्री के रूप में संदर्भित करता है, जो बहुत ही कुशल है। –

+0

सांख्यिकीय विश्लेषण करने वाली मशीन MySQL डेटाबेस में डेटा तक पहुंचने और संग्रहीत करने के लिए दूरस्थ रूप से सर्वर से कनेक्ट हो रही है। यह एक साझा वेब सर्वर है, इसलिए मुझे नहीं लगता कि वे अपने सर्वर पर घंटे की लंबी सांख्यिकीय दिनचर्या पर निर्भर रहेंगे (यह कम बजट ऑपरेशन नहीं है) – stotastic

+2

ठीक है, इसलिए डीबी में छवि को संग्रहीत करने के बजाय, सभी ज्ञात अक्षमताएं उत्पन्न करती हैं, वेब सर्वर पर प्रस्तुत जेपीईजी अपलोड करें: 'system ("scp temp.jpg my.server.com:/var/www/html/images/my-analysis.jpg") ओह, और संयोग से, आपको शायद जेपीईजी नहीं, सांख्यिकीय ग्राफिक्स के लिए पीएनजी का उपयोग करना चाहिए। –

1

डेटाबेस में छवियों को संग्रहीत करना अक्सर फहराया जाता है। आर में मेमोरी फ़ाइल बनाने के लिए आप एक कनेक्शन के रूप में textConnection का उपयोग कर सकते हैं। यह आपको स्ट्रिंग देगा। यदि आप उचित माइम प्रकार सेट करना और बाइनरी के रूप में कनेक्शन खोलना नहीं भूलते हैं तो यह काम करेगा।

0

साजिश को सर्वर पर सहेजें और डेटाबेस में फ़ाइल नाम लिखें काम करेगा। लेकिन रैपैच नामक इस चीज में मदद मिल सकती है। इसके अलावा, जेरिक ओम्स के पास कुछ ऑनलाइन demo है, जिसमें हैडली विकम के प्रसिद्ध आर ग्राफ पैकेज ggplot2 के लिए एक वेब इंटरफ़ेस शामिल है।

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