Microsoft MVP성태의 닷넷 이야기
C# - 실시간 5개 룸 모니터링 [링크 복사], [링크+제목 복사],
조회: 4631
글쓴 사람
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)
5809이상훈1/31/20234863다채널 영상 디스플레이어 개발 관련 질문입니다. [3]
5808근우1/30/20234668WPF 에서 UserControl 과 ControlTemplate 의 차이점은 무엇인가요? [6]
5807궁금맨1/28/20235923C# 10 책에 나온 예제의 결과가 제 컴에서는 좀 달라서요. 이유가 궁금합니다. [1]
5806스레드1/25/20234485총정리 - 다양한 스레드들 [초안] [1]파일 다운로드1
5805어웨이트1/25/20234216Taskcontinuewith vs Async/Await [2]파일 다운로드1
5804나이많은...1/25/20234155MS의 Dependency Injection(DI)에 AddSingleton으로 등록된 객체의 Event 등록후 사용시 앱 종료시 별도로 Event를 해지해야 하나요? [2]
5803dssc...1/24/20234153드라이브 문자를 통해서 물리 디스크 명칭을 알아내고 싶습니다. [1]
5802모바일앱1/22/20234327XAMARINE vs Android Studio [7]
5801블루투스1/19/20234884WPF 은행지폐계수기 개조 후 결과값 서버 전송 [2]파일 다운로드1
5800김민아1/19/20234951안녕하세요 가비지 컬렉터 동작 원리 중 궁금한점이 있습니다 [5]
5799guest1/19/20234601C# 공유폴더 내 Acess 디비 공유 [2]
5798kss1/19/20234261책 오탈인가요? [1]
5797이거비버1/19/20234382C# 공부 이후 MS 프레임워크.. 어느것을 공부해야할까요? 너무 많아서 정신이 없네요 [5]
5796guest1/19/20233998해킹 test [3]
5795동기1/18/20233730동기 스레드와 메서드와 While [2]
5794박규동1/18/20233767.net publish 할때마다 runtimeconfig 값이 바뀌는 현상 [1]
5793후후훗1/18/20234139.NET Core 에서 사용중인 함수 후킹 방법 [2]
5792Will...1/18/20233860소스코드 Log Write 기능을 리스트업 질문 [9]
5791PLC1/16/20234631C# - 실시간 5개 룸 모니터링 [15]
5790집으로 ...1/13/20234256[UI 멈춤 현상]deadlock 관련 글을 보고 혹시나 하고 문의 드립니다. [4]
5789guest1/10/20234168스레드와 Async Task [2]파일 다운로드1
5788kr11/10/20234675C# 에서 제공하는 컬렉션들의 차이점이 궁금합니다. [3]
5787stack1/10/20234470STACKOVERFLOW [1]
5786Dev ...1/9/20235464익명 클래스 말고 익명 구조체는 불가능한걸까요? [4]
5785음성인식1/8/20235039음성인식 System.Speech - 문법에 사용된 언어가 음성 인식기의 언어와 일치하지 않습니다. [2]
5784MS워드1/8/20234598MS워드에서 ctrl Z는 클립보드를 이용하나요? 아니면 참조자 이용하나요? [7]
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...