r语言 - 每24小时在Shiny应用程序中下载CSV并显示下载时间



我有一个CSV要下载。我不希望每次用户加入或使用该应用程序时都下载它。

我想每24小时运行一次代码,并显示1(自上次下载以来的计时器2(直到下次下载的计时器3(上次下载的时间戳中的任何一个

以下是我现在所拥有的,它很有效,但可能会导致不必要的下载。和残疾人一起做点什么是为了工作还是有更好的方法?

CSV.Path <- "https://oracleselixir-downloadable-match-data.s3-us-west-2.amazonaws.com/2021_LoL_esports_match_data_from_OraclesElixir_20210404.csv"
download.file(CSV.Path, "lol2021")
lol2021 <- read.csv("lol2021")

有两种方法可以实现这一点:

  1. 检查应用程序启动时是否应该下载;如果文件的更新时间超过24小时,请不要重新下载。这可以很容易地通过解决

    fileage <- difftime(Sys.time(), file.info("data")["mtime"][[1]], units = "day")
    if (is.na(fileage) || fileage > 1) {
    CSV.Path <- "https://oracleselixir-downloadable-match-data.s3-us-west-2.amazonaws.com/2021_LoL_esports_match_data_from_OraclesElixir_20210404.csv"
    download.file(CSV.Path, "lol2021")
    }
    lol2021 <- read.csv("lol2021")
    

    (is.na在那里,以防文件不存在。(

    一个复杂的因素是,两个同时使用的用户可能会试图同时下载它。如果可能的话,这里应该有一些互斥文件访问控制。

  2. 确保此脚本每24小时运行一次,无论哪些用户正在或未在使用该应用程序。你在什么类型的服务器上运行此应用程序?我相信,像闪亮的服务器这样的东西不会像运行cron一样运行,而且你可能无法保证该应用程序是";"清醒";每24小时。RStudio Connect确实允许安排作业,这可能是您的一个考虑因素。

    缺少这一点,如果您可以很好地访问服务器,您可以使用Rscript或类似的方法将其添加为cron作业,以下载并覆盖文件。

关于互斥文件访问的注意事项:许多网络文件系统(在云和服务器体系结构中很常见(不能保证文件锁定。一种常见的技术是下载到临时文件中,然后将该临时文件移动(或复制(到";真实的";文件名。这样可以防止一个进程从文件中读取,而另一个进程正在向文件中写入。。。部分文件读取将是一个令人沮丧且难以重现的错误。

最新更新