Microsoft MVP성태의 닷넷 이야기
C# - 실시간 5개 룸 모니터링 [링크 복사], [링크+제목 복사]
조회: 3329
글쓴 사람
PLC
홈페이지
첨부 파일
 

원론적인 질문입니다
실시간 5개 룸의 0.1초마다 온도, 습도, 전압 모니터링 데이터 추적할 때
실시간으로 데이터를 object로 만들어 list(monitorList)에 집어 넣음과 동시에
foreach를 실시간 데이터를 추적하려고 합니다.

실시간 데이터 저장과 실시간 데이터 추적을 동시에 하는 걸 구현하려는 데
어떻게 설계를 해야 할지 감이 안잡히네요. 수개월 동안 공부 중인데


이때 room별로 별도의 list를 만들어 추적하는 것이 나은지요?
1개의 list에 5개 room의 데이터를 모두 넣어서 추적하는 것이 나은지요?

1안) 1개의 List로
foreach(var roomObj in monitorList){
   if(roomObj.tempearaure > 100){
        stopmachine();
   }
}

2안) Nested List 만들어서
foreach(var roomList in monitorList){
   foreach(var room in roomList){
        if(room.tempearaure > 100){
              stopmachine();
        }
   }
}








[최초 등록일: ]
[최종 수정일: 1/16/2023]


비밀번호

댓글 작성자
 



2023-01-16 01시18분
5개의 목록에 100ms마다 저장한다면 어떤 것을 선택해도 크게 문제될 것은 없어 보입니다.
정성태
2023-01-16 08시23분
[List충돌] 근데 만약 5ms 정도라면 List 저장과 검색이 충돌할 가능성은 아예 없는지요?
저장하는 순간 검색하면 말입니다 1/1000의 확률이지만

혹시 가능성이 있다면 그것을 방지할 방법이 있는지요?
[guest]
2023-01-16 10시47분
그런 부분은 적절한 동기화나 그걸 갖춘 Concurrent...와 같은 자료구조를 사용하시면 됩니다. 혹시 제 책을 가지고 계시다면 "6.6.2 System.Threading.Monitor" 절을 보시면 도움이 될 것입니다.
정성태
2023-01-17 10시14분
[김모씨] 눈팅하다가 (영양가는 모르겠지만) 의견이 있습니다.
일단, 메인 데이터 저장소가 1개의 리스트던, n개의 리스트라면
성태님 의견대로 컨커런트에 동기화, lock등 스레드, 어느순간 Flush등 리스트 관리를 해줘야 하겠지만

각 데이터를 쪼개면 어떨까 합니다. (아이디어 베이스는 구글분석의 동작입니다.)

(1번 프로그램)
일단 데이터가 들어오는 부분에 특정 Web API를 만들어서 Queue 같이 만들어서 수집만 합니다.
이후 수집하는 프로세스는 파일로 저장하거나 디비에 저장하거나 하면 될듯 합니다.
(*만약 파일로 저장한다면 1개의 WEB API 콜당 1개의 파일로 저장하면 파일은 늘어나지만 응답성은 좋을거라 보입니다.)

(2번 프로그램)
위 1번 프로그램에서 저장된 데이터를 처리하여 위 본문에 제시하는 상태관리 리스트에 넣고
검색용 데이터도 넣고하는 후처리 작업을 합니다.
(* 만약 파일이라면 이 후처리 작업을 하고는 파일 지워주거나 백업처리 하면 될거 같습니다.)

이러면 프로그램이 쪼개지며 관리해야 하는 부분이 늘어나지만
일단, 데이터는 받아제끼고 데이터 처리는 후처리로 하니 입맛대로 지지고 볶을 수 있을 것 입니다.

(단점 1번) 1번 프로그램과 2번 프로그램이 사이의 타이밍 이슈가 있을 수 있는데 시간을 바꿔가며 보정하면 될 것입니다.

전문적인 지식이 부족한 상태에서 성능을 둘째치고, 일단 돌아가게끔 만드는 사람으로서 의견입니다.
틀린부분이 있을거 같지만 의견 작성해봅니다.

다시 눈팅모드입니다. ㅎㅎㅎ
[guest]
2023-01-17 10시15분
[list] 결국 제 선에서 해결할 문제는 아니네요ㅋ
적절한 자료구조를 쓰면 그 녀석이 알아서 해준다는 말씀이네요 ㅎ
[guest]
2023-01-17 10시22분
[list] 10시14분글님께 - 긴 글 감사드립니다 추가적으로 공부가 되었습니다 제 질문은 list가 뻑나서 저장 및 검색 기능자체가 자체가 돌아가지 않는 경우가 있을 수 있지 않냐는 것이지만요
[guest]
2023-01-17 12시45분
[김모씨] (일단 질문의 요지를 제대로 못보고 답글 작성한 것은 있습니다.)
PLC님의 질문 요지는 "list가 뻑나서 저장 및 검색 기능자체가 자체가 돌아가지 않는 경우가 있을 수 있지 않냐는 것" 이었고

질문에 대한 답만 말하자면 뭔가 숲을 보는(?) 과정이 줄어들어 같아서요 ㅎㅎㅎ

암튼
리스트에 데이터를 저장하고 어떤 Magic한 방법을 쓰면 뻑이 나지 않는다
그 과정은 어떻게 할 수 있는가? 로 질문될 수 있을거 같아요

그리고 성태님께서 의견을 제시해주셨고
PLC님이께서 이슈를 해결/보완 할 수 있다면 아주 베스트 하죠

다만 저는 지나가다 의견을 제시한 것인 꼭 리스트만 저장소로 안써도 된다가

(비유해서) 리스트라고 하는 "나무"만을 보지말고 전체적으로 숲을 보고
그 리스트라고 하는 나무를 위해 부가적인 것들을 붙여도 된다고 하는 것 입니다.

혹시라도 PLC님의 손을 떠나게 되는 과정으로 흘러간다고 해도
사이드 프로젝트로 이것도 해보고 저것도 해보고 하면 어떨까 합니다.
[guest]
2023-01-17 02시01분
@김모씨 님이 좀 더 넓은 시각으로 의견을 주셨는데, 일단 "list가 뻑나서 저장 및 검색 기능자체가 자체가 돌아가지 않는 경우"는 단일 스레드에서 발생하지 않습니다. 반면 다중 스레드에서 발생할 수 있기 때문에 이전에 답변한 대로 그런 상황에서는 동기화를 해야 합니다.

"결국 제 선에서 해결할 문제는 아니네요"라고 답변하셨는데... 본인이 해결할 문제가 맞습니다.
정성태
2023-01-17 02시58분
[LIST] 단일 스레드에서는 발생하지 않는다 -> 듣고 싶었던 말입니다
다중 스레드에서는 동기화를 해주어야 한다 ->
 1) 1개의 list에서 5ms 단위로 저장 직후 검색을 동시에 하는 경우 - 동기화해줘야 한다
    이 말씀이죠? 비동기는 안된다
[guest]
2023-01-17 03시15분
[동기List] [추가질문] 그런데 동기화를 시키면 5ms 단위로 쏟아지는 자료들의 속도를
Monitor에서 못따라가면 어떤 일이 생기는지요? 어떻게든 늦더라도 동기방식으로
쫒아가게 되나요?
[guest]
2023-01-17 03시20분
[list변경과 추가] List추가와 변경은 완전히 다른 문제네요. 제가 구별을 못한 것같습니다.
기존 List에 Add를 하는 중에 기존 element를 수정하는 것은 문제발생여지가
높은 문제로 알고 있는데 단순히 새로운 element를 추가하는 것은 이 보다는
문제 여지가 적겠네요
[guest]
2023-01-17 03시25분
[김모씨님께] 일단 관심 감사드립니다. 그런데 5ms 마다 들어오는 자료들을
저장하고 검색이 db를 통해가능한지요? 무식한 질문에 죄송 nn
SQLITE의 경우는 단일페이지 DB라서 쓰기기능과 읽기 기능의 제한 등
뭔가 DB상의 시간차 문제는 어떻게 해결할지 공부해보겠습니다

또한 파일에 저장하는 분량만큼은 에러로 PC가 강제 종료되는 경우를 대비해서
최소화하면서 가야겠군요

답변 감사드립니다
[guest]
2023-01-17 05시28분
[김모씨] 일단 여기서 말하는 0.5초 마다가
0.1초마다 이벤트가 발생하는 기기가 5대인거죠?
5대라지만 이게 10대가 되고 100대가 되고 한다면
제니퍼에서의 HTTP Stream 받는거 같은(?!) 느낌이네요 ㅎㅎㅎ

암튼,

질문 : 일단 관심 감사드립니다. 그런데 5ms 마다 들어오는 자료들을 저장하고 검색이 db를 통해가능한지요?
답 : 가능은 합니다.
다만 들어오는 데이터 크기에 따라 다르지만 상황에 따라 딜레이가 있을 순 있고
실시간이라 디비서버가 힘들어할 수도 있습니다.

예상되는 딜레이로는
이벤트 발생시 특정 서버로 쏘는시간
웹서버가 받아들이는 시간
데이터 파싱(JSON?)하는 시간
디비에 INSERT 하는 시간 등 반드시 발생하는 시간도 있습니다.
(1건의 이벤트에 데이터 양에 따라 티가 날지도 안날지도 모릅니다.)

디비가 힘들어하는건 INSERT / SELECT가 빈번해서 입니다.
이런일 하라고 디비가 있는거기도 하지만 그래도 0.1%라도 덜 바쁘게 해줄 수 있다면 좋겠죠

결론, 딜레이 생각하지 말고 우선 해보면서(맨땅에 헤딩) 하면 결과가 함께 나오니
PLC님 선택이나 프로그램 동작 로직/코드진행 결정에 도움이 될것입니다.

의견 : 무식한 질문이라는건 없다고 봅니다.

질문 : 디비 시간차 이슈
답 : 이건 저도 가이드가 어렵네요 위에 적혀진 "우선 해보면서" PLC님이 노하우를 쌓아야 할거라 봅니다.
그나저나 이게 미션 크리티컬한게 아니라면 Self로 어느정도 의도적인 딜레이는 고려해보세요

질문 : PC 강제종료를 대비해서 최소화도 필요하지만
PC 자원이 있는데 놀게하기 보다는 쓸 수 있으면 쓰고 상태는
관리해주는 또 다른 프로그램을 만들면 어떨까 합니다.
가령 CPU,메모리 사용이 50% 넘으면 알림, 60%면 또 알림 80%면 알림하고
뭔가 프로그램적으로 제한을 둔다거나 그런거죠


쓰고보니, 해보면 재미있는 일이 될수도 있겠어요 ㅎㅎㅎ
[guest]
2023-01-17 05시32분
[김모씨] 쓰다보니 또 횡설수설 한거같아요 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
쿨럭;;;
[guest]
2023-01-17 05시40분
[감사] 감사합니다 더 공부해볼께요
[guest]

1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5777감사합니...12/29/20223477UI Thread에 Invoke 처리관련 궁금합니다. [3]
5776pdf맨12/28/20223287C# MouseUp Event + pdf [10]
5775민성12/28/20223058안녕하세요 Class 관련해서 예외처리를 하나로 받아낼수 있는 방법 [1]
5774중급12/27/20223831중급개발자란 어느 수준인지요? [4]
5773김영식12/26/20223400c# 압축파일 읽어 올 때 BinaryRead 한글 처리 문제 [1]
5772눈송이12/26/20223499Excel VSTO 는 왜 Net Core, Net 5, 6 버전을 사용하지 않나요? [2]
5771김훈12/26/20223608c# .net client application 망분리(내부망,외부망) 환경에서 의문의 외부사이트 호출 대기 [2]
5770lsh12/26/20223201클라우디움안에 있는 파일을 File.Copy 하고싶은데 코드로는 접근을 못하나요? [1]
5769울타리12/20/20223269Active Directory 2012R2 2016 또는 2019 마이그렝션 문의 드립니다. [1]
5768c++12/14/20224030Thread를 사용한 C++ DLL에 관련된 질문입니다. [6]파일 다운로드2
5767민성12/9/20223370안녕하세요 ashx로 화일을 저장하고 화일명을 리턴하는데요 [1]
5766김명훈12/9/20223521웹브라우저에서 묻지 않고 바로 다운로드 [2]
5765hong12/1/20223744Winform(.Net6) 클라이언트에서 SignalR Core 웹서버에 접속시 인증서 문제 [3]파일 다운로드1
5764요한11/30/20223965c++ 동일한 객체인지 비교 방법문의 [2]
5763고필석11/30/20223459시작하자마자 비정상 종료하는 프로세스에 대한 문제 해결 조언 요청 드립니다. [3]
5762흰털너부리11/30/20223449wpf mvvm ui update 로딩중 표시 [1]
5761민성11/29/20223344죄송하지만 한가지만 더 여쭈어 보겠습니다 [1]
5760민성11/29/20223282안녕하세요 [2]
5759문정환11/28/20223616c# socket 통신할때 빅엔디언으로 바꿔줘야 하나요? [1]
5758라떼11/28/20224795Linux 에서 winform UI 어플리케이션 실행하기 [3]
5757흰털너부리11/25/20223769asp.net core EF AddDbContext,AddDbContextFactory 차이점 알려주세요 [1]
5756흰털너부리11/25/20223350asp.net core web api에서 json 특정 property 무시하는 방법 문의 드립니다. System.Text.Json 사용중입니다. [1]
5755문정환11/24/20223709싱글스레드 프로그램도 컨텍스트 스위칭이 생길 수 있나요? [4]
5754초급11/24/20223560c# 소켓통신 [1]
5753흰털너부리11/24/20223365List와 ObservableCollection을 비교 해서 다른 값 추출 FirstOrDefault 객체 비교 [4]파일 다운로드1
5752푸헐11/15/20223500app.config 에 connectionStrings를 aspnet_regiis로 enctyption [4]
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...