2017-04-15 5 views
0

일부 파일에서 데이터를로드하는 반짝 이는 응용 프로그램이 있습니다. 서버에서 서버를 방해하지 않고 해당 파일을 업데이트하는 가장 좋은 방법은 무엇입니까?반짝 이는 서버 : 서버의 데이터를 업데이트하는 가장 좋은 방법은 무엇입니까

1) reactivePoll() 또는 reactiveFileReader()

http://shiny.rstudio.com/gallery/reactive-poll-and-file-reader.html

2) reactiveValues()

Update a data frame in shiny server.R without restarting the App

values <- reactiveValues() 
updateData <- function() { 
    vars <- load(file = "my_data_frame.RData", envir = .GlobalEnv) 
    for (var in vars) 
    values[[var]] <- get(var, .GlobalEnv) 
} 
updateData() # also call updateData() whenever you want to reload the data 

output$foo <- reactivePlot(function() { 
    # Assuming the .RData file contains a variable named mydata 
    plot(values$mydata) 
} 
를 사용하여 사용하여 인터넷을 검색

, 나는이 두 가지 솔루션을 발견

반짝이는 파일을 다시로드하는 가장 좋은 방법은 무엇입니까?

입력 해 주셔서 감사합니다.

답변

2

당신이 말하는 종이/샘플 코드 중 일부를 배치하여 질문의 재구성을 시도하겠습니다.

아주 높음 (즉, 반응성에 대해 크게 걱정하지 않아도 됨) 인 R + shiny은 ETL 프로세스의 일부로 데이터를 처리하는 표준 방법과 다릅니다 (예 :).

e.e.

  1. 로드 나머지에서 데이터의 파일 시스템에서 파일에 거주, 또는 RDBMS 쿼리를 실행 즉 데이터 : 당신은 반짝 서버 외부 데이터의 다음 유형 중 하나에로드 할 수 있습니다. 대부분의 사용법을 다루는 표준 사례 입니다.
  2. 로드 데이터가입니다. 일반적으로 분석하려고하는 유형의 데이터 스트림 을 말합니다 (즉 파일 또는 RDBMS 테이블에 을 지속하지 않고).

    server <- function(input, output, session) { 
    --- 
    output$foo <- reactivePlot(function() { 
        someQuery <- dbGetQuery(...) # some query of a database 
        plot(values$mydata) 
    } 
    --- 
    } 
    

    위의 코드는 쿼리 반응 함수가 실행될 때마다를 실행합니다 :

먼저, 나머지에서 데이터가 첫 번째 경우의 다른 품종에 대해 이야기 할 수 있습니다.

여기 반응성이 큰 도움이 될 수 있습니다. 예를 들어 다른 변경 사항없이 위의 코드는 각 사용자가 응용 프로그램에 연결될 때마다 한 번 실행됩니다.

외부 프로세스에서 기본 데이터가 자주 업데이트되는 경우 다른 사용자에 대한 결과가 다를 수 있습니다.

또한 반응 구조가 다시 실행되도록하는 모든 항목은 쿼리를 다시 실행합니다. 예를 들어 브라우저를 새로 고치면 각 브라우저 새로 고침에서 다른 세션이 생성되므로 쿼리가 다시 실행됩니다).

빛나는 교육에서 알 수 있듯이 다음 단계는 위의 반응 구조를 다른 UI 요소 (예 : 작업 단추 또는 selectInput)와 연결하여 데이터를 필터링하는 것입니다.

server <- function(input, output, session) { 
--- 
output$foo <- reactivePlot(function() { 
if((length(input$actionbutton) ==0) | (length(input$selectData) == 0)) return() 
# the reactive now is connected to these two shiny inputs and executed every time they change 

someQuery <- dbGetQuery(...) # some query of a database, maybe with a *where* clause dependent on input$selectData 
    plot(values$mydata) 
} 
--- 
} 

은 이제 쿼리는 모든 액션 버튼을 누르면 시간이나 새로운 선택이 만들어 실행됩니다.

ETL에서 보았거나 구현 했으므로 사용 사례에 따라 데이터가 자주 변경된다고 가정 해 보겠습니다. 파일 (또는 테이블)이 외부 프로세스에 의해 지속적으로 갱신된다고 가정하십시오.

빈번히 업데이트 (일괄 처리를 통해 데이터를 처리 중이거나 간격이 아주 작은 일괄 처리 일 경우) 한 경우에도이 유스 케이스는 일반적으로 정지 상태로 간주됩니다.

reactiveFileReaderreactivePoll의 다른 구문이 적용되는 첫 번째 예는 여기에 있습니다.

파일 (예 : 로그 파일)이 외부 프로세스에서 자주 업데이트되는 경우 reactiveFileReader을 사용할 수 있습니다.

데이터베이스 테이블이있는 경우 예를 들어 reactivePoll으로 x 초마다 폴링 할 수 있습니다.

여기 코드는 반응성의 이점을 모두 누릴 수 있습니다. 자동으로 코드는 x 초마다 실행되며 그에 따라 반응하는 모든 나머지 코드도 새로 고침됩니다. 나는 조 쳉 동안 제대로 토론을 기억한다면

이제

? 당신이 데이터에 반짝 검사. 당신이 얼마나 멀리 갈 수있는 동안 * 배치 크기 "(예 : 창)를 감소하려고 가정 할 수 있습니다 그는 광채가 초당 최대 50,000 events을 처리 할 수 ​​있다고 확신했습니다 (데이터베이스를 폴링하거나 초당 여러 번 파일을 읽는 것을 상상해보십시오).

이것을 올바르게 기억한다고 가정하면 어쨌든 이론적 인 한계 인 50,000 events을 고려해보십시오. (아마도 RBMS에서 데이터를 쿼리하는 데 걸리는 시간을 줄여야 할 것입니다. 1 초 (즉, < 1000 파일 은 초당으로 읽음), RDBMS의 시간 간격이 훨씬 더 깁니다.

위의 기능에 대한 시간 단위가 밀리 초인 것은 놀랄만하지 않습니다.

위의 구문을 사용하면 매우 야심 찬 마이크로 배치 파이프 라인을 사용하여 구현할 수 있다고 생각합니다.

그것도 가능한이 R + shiny에 데이터를 게시 할 Apache Kafka를 사용하는 상상할 수 (어쩌면로드 밸런싱과 Shiny Server Pro의 여러 인스턴스를 사용하여 카프카를 제공! 맛있는)`

그럼, 모션에서 데이터에 대한?

R and shiny에 대해 관리 할 수있는 속도로 소방서에서 데이터를 가져온다면 괜찮을 것입니다 (이 스트리밍 유스 케이스에 어떤 R 알고리즘을 사용할 지 식별하는 것이 어려울 수 있지만 다른 질문이 필요합니다.).

반면에 프로세스가 위에서 정의한 것보다 훨씬 더 낮은 대기 시간을 필요로하는 경우 다른 도구 및 파이프 라인을 고려해야합니다 (예 : Apache Flink 또는 ad hoc 코드 고려).

매우 상세한 설명에 사과드립니다. 이 복잡한 주제가 더 명확 해지면 알려주세요.

+0

안녕하세요 엔조. 당신의 훌륭한 대답에 대해 많은 감사드립니다! – Yufrend

+0

감사합니다 .Yefrend. 방금 영어가 어설픈 부분을 수정했습니다. 바라건대 지금은 분명하다. – Enzo