2010-07-19 33 views
8

Tôi đang cố gắng tạo một quy trình trích xuất dữ liệu từ máy chủ MySQL (sử dụng gói RODBC), thực hiện một số quy tắc thống kê trên dữ liệu đó trong R, sau đó lưu các ô được tạo trở lại máy chủ rằng chúng có thể được truy xuất trong Trình duyệt web thông qua một chút phép thuật php và web.Lưu âm mưu R vào máy chủ web

Kế hoạch của tôi là lưu cốt truyện vào trường BLOB MySQL bằng cách sử dụng gói RODBC để thực thi chèn SQL vào câu lệnh. Tôi nghĩ rằng tôi có thể chèn dữ liệu trực tiếp dưới dạng một chuỗi. Vấn đề là, làm thế nào để có được chuỗi dữ liệu và điều này thậm chí sẽ làm việc? Suy nghĩ tốt nhất của tôi là sử dụng hàm savePlot để lưu một tệp tạm thời và sau đó đọc lại nó bằng cách nào đó.

Bất kỳ ai đã thử điều này trước hoặc có đề xuất về cách tiếp cận điều này?

+0

Trong khi không bao giờ sử dụng R, tôi gần như chắc chắn sẽ có một số loại tính năng tuần tự hóa trong đó ... – Wrikken

+0

Cảm ơn, tôi đang xem hàm serialize() như một giải pháp có thể. – stotastic

+1

Bạn có chắc chắn muốn các đốm màu hình ảnh trong cơ sở dữ liệu không? Tôi không nghĩ rằng đó là một ý tưởng tốt, như các đốm màu nói chung - tại sao không phải hình ảnh như các tập tin và tên tập tin trong db? – mbq

Trả lời

2

Bất kể nếu bạn nghĩ rằng đây là một ý tưởng khủng khiếp, đây là một câu trả lời làm việc tôi đã có thể mảnh với nhau từ này 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) 

Trước khi thực hiện, tôi sẽ chắc chắn để làm một số linh hồn tìm kiếm để quyết định xem điều này có nên được sử dụng thay vì sử dụng hệ thống tệp của máy chủ hay không.

+0

Bạn đang phát sinh chi phí I/O khủng khiếp ở đây. Nếu máy chủ MySQL nằm trên cùng một máy với máy chủ web, lệnh gọi 'savePlot()' của bạn chỉ cần ghi tệp ra ở đâu đó mà máy chủ web có thể thấy. Trong Apache-nói, điều này có nghĩa là viết nó một nơi nào đó theo DocumentRoot, hoặc trong một thư mục riêng biệt ánh xạ vào cây tài liệu với một chỉ thị Directory. Nếu hai máy tách biệt, tập lệnh R sẽ chạy trên máy chủ web để có thể ghi tệp ra cục bộ, tuân theo cùng các quy tắc. Dù bằng cách nào, trang phục vụ hình ảnh tham chiếu đến tệp dưới dạng nội dung tĩnh, rất hiệu quả. –

+0

Máy thực hiện phân tích thống kê đang kết nối với máy chủ từ xa để truy cập và lưu trữ dữ liệu trong cơ sở dữ liệu MySQL. Đó là một máy chủ web chia sẻ, vì vậy tôi không nghĩ rằng họ sẽ xem xét vui lòng khi chạy các thói quen thống kê dài giờ trên máy chủ của họ (đây là hoạt động không có ngân sách thấp) – stotastic

+2

Được rồi, thay vì lưu trữ hình ảnh trong DB, tất cả các hiệu suất không xác định được tạo ra, tải lên JPEG được hiển thị lên máy chủ web: 'system (" scp temp.jpg my.server.com:/var/www/html/images/my-analysis.jpg ")' Oh và tình cờ, có lẽ bạn nên sử dụng PNG cho đồ họa thống kê, chứ không phải JPEG. –

1

Lưu trữ hình ảnh trong cơ sở dữ liệu thường bị cau mày. Để tạo một tệp trong bộ nhớ trong R, bạn có thể sử dụng một kết nối là textConnection. Điều này sẽ cung cấp cho bạn chuỗi. Nó sẽ hoạt động nếu bạn không quên đặt loại mime thích hợp và mở kết nối dưới dạng nhị phân.

0

Lưu lô đất vào máy chủ và viết tên tệp vào cơ sở dữ liệu sẽ hoạt động. Nhưng có thứ gọi là Rapache này có thể giúp ích. Plus, Jeroen Ooms có một số trực tuyến demo, bao gồm giao diện web cho gói đồ thị Rg nổi tiếng của Hadley Wickham ggplot2.

Các vấn đề liên quan