Microsoft MVP성태의 닷넷 이야기
C# - 실시간 5개 룸 모니터링 [링크 복사], [링크+제목 복사],
조회: 3418
글쓴 사람
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]

... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5402민성11/5/20207750안녕하세요 책을 보고 질문하나만 드릴깨요 [2]
5401민성11/3/20206807안녕하세요 이번에도 질문 하나만 드리겠습니다. [2]
5400진우10/29/20206496SQL Server 관련 몇가지 문의 [2]
5399Wpf개...10/21/20206702Binding 된 항목의 갱신 시 간헐적 끊어짐 발생 문제. [2]
5397나그네10/15/20206182.net Core 3.1 에서 Entity Framework 와 ADO.NET 선택에 관해 여쭤봅니다. [2]
5396여정욱10/15/20206275CLR heap 관련 질문 2 [2]
5395여정욱10/14/20208033CLR heap 관련 질문 [2]
5394진우10/12/202011474닷넷코어 (닷넷5) winform wpf는 리눅스/맥에서도 가능한가요? [2]
5393김세용9/23/20207964C#에서 대량의 클래스를 빠르게 생성하는 방법이 없을까요? [6]
5392전경호9/22/20207613WPF에서 WindowsFormsHost의 메모리 누수 문제 때문에 문의드립니다. [1]파일 다운로드1
5391민성9/22/20206927안녕하세요 항상 감사드립니다. 하나 질문 드리겠습니다. [1]
5390alow...9/18/20209800System.AccessViolationException 보호된메모리 부분 예외처리 [1]
5389C# 8...9/18/20208058후위 증감 연산자 오버로딩 방법 좀 알려주세요 [4]
5388영귤9/17/20208997Nullable reference type 에 Non-nullable reference type 을 대입해도 경고가 발생하지 않습니다. [2]
5387하태9/17/20207441안녕하세요! 비동기 통신과 관련하여 질문하나만 드리겠습니다! [3]
5386박민웅9/16/20209205정성태 스승님 안녕하세요 !! [1]
5385영귤9/12/202067063항 연산자에 ref 지원? [1]
5384guest9/10/20206582시작하세요! C# 8.0 프로그래밍 책에 오타가 있는 것 같습니다. [3]
5383민성9/8/20208066안녕하세요 자주 도움을 주셔서 감사드립니다. WPF에서 크롬 브라우저 삽입에 대하여 [1]
5382정씨9/4/20207231[C#] 시리얼통신 수신된 데이터를 그리드뷰에 뿌르는데 일정 시간이 지나면 버벅 거리는 이유가 뭘까요?? [3]
5381질문 있...9/4/20207021웹으로 사용하는 c#과 응용프로그램으로 사용하는 c#이 많이 다른가요?? [2]
5380yeon9/3/20207090winform 의 datagridview는 바인딩이 안 되나요? [1]
5379guest9/2/20209730시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [3]
5378net9/2/20207215mes 응용프로그램을 .net 웹폼으로 만들기도 하나요? [2]
5377net9/2/20206623.net 사용한 웹폼으로 응용프로그램을 만들경우 [1]
5376영귤9/1/20207011nullable 타입간의 비교연산은 그냥 가능한 건가요? [1]
... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...