【问题标题】:Save R plot to web server将 R 绘图保存到 Web 服务器
【发布时间】:2011-03-18 03:37:54
【问题描述】:

我正在尝试创建一个从 MySQL 服务器中提取数据的过程(使用 RODBC 包),在 R 中对该数据执行一些统计例程,然后将生成的图保存回服务器,以便可以在通过一点 php 和 web 魔术的 Web 浏览器。

我的计划是通过使用 RODBC 包执行 SQL 插入语句将绘图保存在 MySQL BLOB 字段中。我想我可以直接将数据作为字符串插入。问题是,我如何获取数据字符串,这甚至可以工作吗?我最好的想法是使用 savePlot 函数保存一个临时文件,然后以某种方式将其读回。

之前有人尝试过这个,或者对如何解决这个问题有建议吗?

【问题讨论】:

  • 虽然从未使用过 R,但我几乎可以肯定其中会有某种序列化功能......
  • 谢谢,我现在正在考虑将 serialize() 函数作为一种可能的解决方案。
  • 您确定要在数据库中使用图片 blob 吗?我不认为这是一个好主意,作为一般的 blob - 为什么不将图片作为 db 中的文件和文件名?
  • BLOB 听起来是个糟糕的主意。为什么不将绘图上传到服务器并将文件名写入数据库?然后,您可以使用 php 显示这些图。
  • 你已经掌握了。将绘图保存到临时文件,然后显示它...您可以使用 RApache 和 brew 包... Jeroen Ooms 的 ggplot2 Web 应用程序就是在那个庄园完成的。

标签: mysql r rodbc


【解决方案1】:

无论您是否认为这是一个糟糕的主意,我都能从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)

在实施之前,我会确保进行一些灵魂搜索,以决定是否应该使用它而不是使用服务器文件系统。

【讨论】:

  • 你在这里招致了可怕的 I/O 开销。如果 MySQL 服务器与 Web 服务器在同一台机器上,您的 savePlot() 调用应该只是将文件写入 Web 服务器可以看到的某个位置。在 Apache 语言中,这意味着将其写入 DocumentRoot 下的某个位置,或者使用 Directory 指令映射到文档树的单独目录中。如果两台机器是分开的,R 脚本应该在 Web 服务器上运行,这样它就可以按照相同的规则在本地写出文件。无论哪种方式,提供图像的页面都将文件作为静态内容引用,非常有效。
  • 执行统计分析的机器正在远程连接到服务器,以便访问和存储 MySQL 数据库中的数据。它是一个共享的网络服务器,所以我认为他们不会希望在他们的服务器上运行长达一小时的统计例程(这是一个低预算甚至没有预算的操作)
  • 好的,所以不要将图像存储在数据库中,因为所有已知的低效率都会创建,而是将渲染后的 JPEG 上传到 Web 服务器:system("scp temp.jpg my.server.com:/var/www/html/images/my-analysis.jpg") 哦,顺便说一句,您可能应该使用用于统计图形的 PNG,而不是 JPEG。
  • 好命令!如果我走“文件系统”路线应该会有所帮助。
【解决方案2】:

在数据库中存储图像通常是不受欢迎的。要在 R 中创建内存文件,您可以使用 textConnection 作为连接。这会给你字符串。如果您不忘记设置正确的 mime 类型并将连接打开为二进制文件,它将起作用。

【讨论】:

    【解决方案3】:

    将绘图保存到服务器并将文件名写入数据库即可。但是有一个叫做 Rapache 的东西可能会有所帮助。另外,Jeroen Ooms 有一些在线 demo,包括 Hadley Wickham 著名的 R Graph 包 ggplot2 的 Web 界面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2011-12-04
      • 2015-01-24
      • 2019-12-16
      相关资源
      最近更新 更多