Microsoft MVP성태의 닷넷 이야기
C# - 실시간 5개 룸 모니터링 [링크 복사], [링크+제목 복사]
조회: 3271
글쓴 사람
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)
5589초급12/22/20214651c# -> 라즈베리파이(db 접속)시 에러 발생 [7]
5588김지신12/21/20214627안녕하세요 String 변수 참조 주소 질문입니다. [2]
5587이완호12/17/20215733C# SharpDX 화면 캡쳐 관련해서 질문 드립니다. [1]
5586조미김12/16/20214889윈폼에서 메인 스레드와 UI 스레드의 차이점 질문드립니다 [4]
5585김준희12/16/20215660C# 윈폼 TCP/IP 데이터 연속으로 보낼때 [1]
5583난인간이다12/10/20214730.net 6 dynamic pgo 활성화 및 예상되는 문제 [1]
5582김준희12/9/202111836C# TCP/IP 통신시 연결 끊김 에러 [1]
5581김시준12/9/20215252닷넷에서 파일 delete 함수는 왜 비동기가 없는 것인가요? [2]
5580카짜프로...12/7/20216502패턴매칭 -튜퓰비교에 관한 오류사항과 궁금증 [1]파일 다운로드1
5579카짜프로...12/6/2021572311.12 메서드 중복정의에 대한 질문 [1]
5577감사합니...11/30/20214748visual studio 2015 update 3를 다운받을려고 하는데 x64/x86 차이점이 뭘까요? [2]
5576노홍구11/29/20214636C# 으로 USB 스캐너 프린터 리셋하기 입니다. [1]
5575베라11/23/20214688event handler 관련 문의 [2]
5574박원웅11/22/20214989닷넷 프레임워크 산출물의 배포시 해당 환경에 프레임워크 버전이 설치되어 있지 않는 경우를 고려한 배포방법은? [3]
5573mijin11/21/20214812System.NullReferenceException 에 대한 질문 [1]
5572김현진11/21/20214986C# list.Clear() 호출에 대한 문의 드립니다. [4]
5571한예지 donator11/18/20214947무설치 프로그램 원리가 궁금합니다. [2]
5570초보11/16/20215444주식데이터 초당 수신 건수를 구하고 있는데 처리속도가 느려서요 [2]
5569카짜프로...11/14/20216373381페이지 UTC에대한 언급이 그리니치 천문대 시간으로 되어있는게 맞나요? [1]
5568카짜프로...11/14/20216443그림 5.20, 그림 5.22 언급 오류 [1]
5567Edun11/2/20215340쿼리문을 코드로 어떻게 처리할 수 있을까요? [2]
5566민성10/26/20215167Linq에 관해서 [1]
5565pass...10/25/20216452wpf에서 Cefsharp를 AnyCPU로 작업 했는데 실행이 되지 않습니다. [4]
5564초보10/21/20214660오버라이드 관련 질문드립니다 [2]
5562서지훈10/20/20214648win32 api 문의 드립니다. (EnableMenuItem) [5]
5561Edun10/15/20215084도와주세요!! 팝업 띄우는 더블클릭 이벤트!! 부탁드립니다 ㅠㅠ [4]파일 다운로드1
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...