당신이 말하는 종이/샘플 코드 중 일부를 배치하여 질문의 재구성을 시도하겠습니다.
e.e.
여기 반응성이 큰 도움이 될 수 있습니다. 예를 들어 다른 변경 사항없이 위의 코드는 각 사용자가 응용 프로그램에 연결될 때마다 한 번 실행됩니다.
외부 프로세스에서 기본 데이터가 자주 업데이트되는 경우 다른 사용자에 대한 결과가 다를 수 있습니다.
또한 반응 구조가 다시 실행되도록하는 모든 항목은 쿼리를 다시 실행합니다. 예를 들어 브라우저를 새로 고치면 각 브라우저 새로 고침에서 다른 세션이 생성되므로 쿼리가 다시 실행됩니다).
빛나는 교육에서 알 수 있듯이 다음 단계는 위의 반응 구조를 다른 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
에서 보았거나 구현 했으므로 사용 사례에 따라 데이터가 자주 변경된다고 가정 해 보겠습니다. 파일 (또는 테이블)이 외부 프로세스에 의해 지속적으로 갱신된다고 가정하십시오.
빈번히 업데이트 (일괄 처리를 통해 데이터를 처리 중이거나 간격이 아주 작은 일괄 처리 일 경우) 한 경우에도이 유스 케이스는 일반적으로 정지 상태로 간주됩니다.
reactiveFileReader
및 reactivePoll
의 다른 구문이 적용되는 첫 번째 예는 여기에 있습니다.
파일 (예 : 로그 파일)이 외부 프로세스에서 자주 업데이트되는 경우 reactiveFileReader
을 사용할 수 있습니다.
데이터베이스 테이블이있는 경우 예를 들어 reactivePoll
으로 x 초마다 폴링 할 수 있습니다.
여기 코드는 반응성의 이점을 모두 누릴 수 있습니다. 자동으로 코드는 x 초마다 실행되며 그에 따라 반응하는 모든 나머지 코드도 새로 고침됩니다. 나는 조 쳉 동안 제대로 토론을 기억한다면
이제
? 당신이 데이터에 반짝 검사. 당신이 얼마나 멀리 갈 수있는 동안 * 배치 크기 "(예 : 창)를 감소하려고 가정 할 수 있습니다 그는 광채가 초당 최대 50,000 events
을 처리 할 수 있다고 확신했습니다 (데이터베이스를 폴링하거나 초당 여러 번 파일을 읽는 것을 상상해보십시오).
이것을 올바르게 기억한다고 가정하면 어쨌든 이론적 인 한계 인 50,000 events
을 고려해보십시오. (아마도 RBMS에서 데이터를 쿼리하는 데 걸리는 시간을 줄여야 할 것입니다. 1 초 (즉, < 1000 파일 은 초당으로 읽음), RDBMS의 시간 간격이 훨씬 더 깁니다.
위의 기능에 대한 시간 단위가 밀리 초인 것은 놀랄만하지 않습니다.
위의 구문을 사용하면 매우 야심 찬 마이크로 배치 파이프 라인을 사용하여 구현할 수 있다고 생각합니다.
그것도 가능한이 R + shiny
에 데이터를 게시 할 Apache Kafka
를 사용하는 상상할 수 (어쩌면로드 밸런싱과 Shiny Server Pro
의 여러 인스턴스를 사용하여 카프카를 제공! 맛있는)`
안녕하세요 엔조. 당신의 훌륭한 대답에 대해 많은 감사드립니다! – Yufrend
감사합니다 .Yefrend. 방금 영어가 어설픈 부분을 수정했습니다. 바라건대 지금은 분명하다. – Enzo