메인 컨텐츠로 가기
무엇을 어떻게 도와드릴까요?

답변을 검색하거나 지식 기반을 찾아보세요.

문서    튜토리얼    고객 지원

목차
<모든 주제
인쇄

상태 저장 서비스

서비스를 사용하여 상태를 효율적으로 저장하기

사전 조건

이 자습서에서는 귀하가 전체 과정을 완료했다고 가정합니다. 입문 튜토리얼 그리고 앱 구성요소 튜토리얼. 아직 완료하지 않은 경우 두 튜토리얼을 모두 완료한 후 이 페이지로 돌아와서 사용 방법을 알아보세요. 상태 저장 서비스 그들을 개선하기 위해.

회사 개요

앱은 입문 튜토리얼 센서 정보를 저장하지 않습니다. 이벤트는 서비스에서 수신 및 처리된 후 삭제됩니다. 엔진의 최신 센서 값을 저장하는 것이 유용한 경우가 있을 수 있습니다. 하지만 각 이벤트가 도착하는 대로 데이터베이스에 저장하는 것은 느리고 비효율적인 솔루션입니다. 확장되지 않습니다. 이 튜토리얼에서는 상태 속성 센서 이벤트를 메모리에 저장하는 서비스입니다. 그런 다음 필요한 경우 메모리에 저장된 값을 가끔씩 데이터베이스에 쓸 수 있습니다.

1부: 구성요소 강화

1. 전역 상태 변수 예제 검토

에서 입문 튜토리얼, 당신은 AccumulateState 태스크 라는 저장속도 인바운드 서비스 이벤트 핸들러에서 속도이벤트. 그만큼 저장속도 작업은 속도 센서 판독값을 속도 전역 상태 변수.

The 저장속도 또한 작업으로 인해 세 가지 프로시저가 생성됩니다. com.vantiq.engines.EngineMonitor.speedGet()com.vantiq.engines.EngineMonitor.speedReset()글렌데일 com.vantiq.engines.EngineMonitor.speedUpdate(). 이는 검색, 재설정 및 업데이트에 사용될 수 있습니다. 속도 전역 상태 변수.

2. 앱 구성요소 강화

앱 구성요소 튜토리얼, 몇 가지 일반적인 작업을 사용하여 필터 및 진단 앱 구성 요소. 추가 작업을 추가해 보겠습니다. 필터 및 진단 앱 구성 요소에 의해 비정상적인 엔진 경고 메시지가 생성될 때마다 엔진 상태를 저장하는 구성 요소입니다.

열기 필터 및 진단 프로젝트 콘텐츠 트리 내에서 클릭하여 앱 구성요소를 선택하세요.

필터및진단구성요소

에서 수정 자 팔레트 섹션에서 AccumulateState 사이의 링크에 대한 작업 진단 추가 임무와 진단 커넥터. 선택하다 event 다운스트림 이벤트로 클릭하고 OK.

새로 만들기 AccumulateState 작업을 수행하고 이름을 바꿉니다. 경고 메시지 저장.

추가저장경고메시지

클릭 수정하려면 클릭하세요. 새 구성을 편집하려면 링크를 클릭하세요. 경고 메시지 저장.

엔터 버튼 마지막 경고 로 상태속성 재산.

클릭 “베일스크립트” 옆에 링크 순서 재산. 이를 통해 다음을 작성할 수 있습니다. 베일 블록 들어오는 이벤트를 기반으로 서비스의 전역 상태를 업데이트하기 위한 코드 조각입니다.

다음 상태 업데이트 코드는 엔진 상태 경고 메시지가 비어 있지 않은지 확인하기 위해 테스트하고 비어 있으면 XNUMX개의 속성을 포함하는 JSON 개체를 만듭니다. 시스템 아이디마지막 경고온도글렌데일 속도.

// Update the value of state using event.
var msg = event.alertMsg
if (msg != "") {
    var newState = {systemId: event.systemId, lastAlert: msg, temperature: event.temperature, speed: event.speed}
    state = newState
}

 OK 편집을 완료하려면 경고 메시지 저장 작업을 클릭한 다음 새 작업이 포함된 구성 요소를 저장합니다. 경고 메시지 저장 작업.

앱 구성 요소가 업데이트되면 이를 사용하는 서비스 이벤트 핸들러를 다시 저장하여 구성 요소 변경 사항을 포함해야 합니다.

열기 com.vantiq.engines.EngineMonitor 서비스를 클릭하세요. 구현 탭을 누른 다음 온도이벤트 이벤트 핸들러 본국으로 돌아가는 부분. NS 온도이벤트 인바운드 이벤트 유형은 필터 및 진단 앱 구성 요소이므로 업데이트해야 합니다. 업데이트를 발생시키는 가장 쉬운 방법 온도이벤트 핸들러는 센서읽기 작업의 이름을 약간 변경한 다음 이름을 다시 센서읽기를 선택한 다음 이벤트 핸들러를 저장합니다.

3. 새로운 전역 상태 테스트

가져온 경우 앱 구성요소 완료 튜토리얼, 두 소스를 활성화해야 합니다. com.vantiq.engines.SpeedSensor   com.vantiq.engines.TemperatureSensor 시뮬레이션된 센서 이벤트의 흐름을 시작합니다.

클릭 활성 자원 제어 센터 (번개) 아이콘을 IDE 탐색 표시줄에 표시하려면 활성 자원 제어 센터 창유리:

ActiveResourceControlCenter

활성화 속도센서   온도 센서 활성 슬라이더를 클릭하여 소스를 확인하세요. 소스가 활성화되면 온도이벤트 핸들러 com.vantiq.engines.EngineMonitor 서비스는 각 작업이 센서 이벤트를 처리할 때 배지를 표시합니다.

온도이벤트배지

이를 확인하려면 마지막 경고 전역 상태가 올바르게 저장되고 있습니다.

  • 클릭 주 정부 섹션 구현 탭,
  • 열어 라. 전역 상태 유형 섹션,
  • 클릭 관측 (재생 아이콘) 옆에 있는 작업 버튼 마지막 경고 변하기 쉬운. 선택하다 마지막 경고 받기 절차로.

하자 마지막 경고 받기 절차를 XNUMX분 정도 실행하고 관찰합니다. 마지막 경고 JSON 객체는 경고 메시지 저장 구성요소 작업이 생성 중:

마지막 경고 받기

2부: 데이터베이스에 상태 쓰기

1. 데이터베이스에 시스템 상태 쓰기

에 표시된대로 입문 튜토리얼, 데이터베이스에 이벤트 데이터를 저장하는 기존 접근 방식은 대부분의 목적에 너무 느리고 불필요합니다. 위의 Part 1에서 수정된 엔진 상태 시스템에서 센서 이벤트를 처리하고 이를 엔진모니터 클라이언트는 모두 메모리 내 상태를 사용하여 수행됩니다. 그러나 특정 데이터를 드물게 지속적으로 저장해야 하는 상황이 있습니다.

지속적인 상태의 예로 마지막 경고를 커밋하는 메커니즘을 생성하겠습니다(마지막 경고) 서비스 상태 개체를 정기적으로 데이터베이스에 보냅니다.

com.vantiq.engines.EngineMonitor 창에서 다음으로 이동합니다. 구현 탭을 클릭하고 + "절차" 섹션의 "공개" 항목 옆에 있는 버튼을 선택하고 공개 절차 추가.

AddWrite프로시저

State 객체를 검색하고 업데이트하는 다음 코드를 복사하여 붙여넣습니다. com.vantiq.engines.EngineLastAlert 일치하는 systemId에 대한 데이터베이스의 인스턴스입니다.

package com.vantiq.engines
PROCEDURE EngineMonitor.writeLastAlert()

var alertState = EngineMonitor.lastAlertGet()
if (alertState) {
    UPSERT com.vantiq.engines.EngineLastAlert(alertState)
}

 찜하기 서비스를 저장합니다. (이 과정에서 서비스 인터페이스에 포함되지 않은 공개 프로시저를 생성했기 때문에 인터페이스가 복구되었다는 팝업 메시지가 표시됩니다.)

엔진마지막 경고가 정의되지 않음

서비스를 저장하면 프로시저에 오류가 표시됩니다. 그 이유는 com.vantiq.engines.EngineLastAlert 유형이 아직 존재하지 않습니다. 해당 이름으로 새 유형을 생성하려면 추가 선택할 메뉴 타입다음을 클릭 신형 단추. 아래와 같이 다음 값을 입력합니다.

  • 이름: 엔진 마지막 경고
  • 묶음: com.vantiq.engines
  • 상품 설명 EngineMonitor 서비스가 주기적으로 작성한 마지막 엔진 경고
  • 역할: 품질

CreateEngineLastAlertType

 만들기 를 표시하려면 com.vantiq.engines.EngineLastAlert 창을 입력합니다. 에서 등록 탭에서 다음 네 가지 속성을 추가합니다. 속성 추가 버튼을 클릭합니다.

  • 이름: 시스템 아이디, 유형: 
  • 이름: 마지막 경고, 유형: 
  • 이름: 온도, 유형: 정수
  • 이름: 속도, 유형: 정수

엔진마지막 경고 속성

로 이동 색인 탭을 선택 색인 추가. 선택 시스템 아이디 키로 설정하고 확인하세요. 인덱스는 고유합니까? 확인란. 딸깍 하는 소리 OK 팝업을 닫으려면

시스템상태속성AddIndex     인덱스 목록

로 이동 자연 키 탭을 클릭하십시오. 키 편집. 클릭 + 키를 추가하고 선택하는 버튼 시스템 아이디 클릭 OK.

자연키 추가     자연 키 목록

 찜하기 유형을 저장합니다. 유형을 저장하면 오류가 제거됩니다. 마지막 경고 쓰기 순서.

2. 절차 일정 잡기

서비스: com.vantiq.engines.EngineMonitor 창에서 주 정부 섹션 상단에 구현 탭.

온 클릭 예정된 절차: 섹션을 확장합니다. 서비스에 정의된 프로시저 중 예약 가능한 프로시저 목록이 표시됩니다. 필수 매개변수가 없는 프로시저만 예약할 수 있습니다.

옆에 마지막 경고 쓰기 목록에 항목을 클릭한 후 일정 추가 단추. 이를 통해 이 절차가 자동으로 실행되는 빈도를 설정할 수 있습니다. 테스트 목적으로 간격을 다음으로 두십시오. 1 분. 그러나 생산 시스템에서는 다음과 같은 더 긴 간격이 필요합니다. 10 분1 시간및 1 일 더 적절합니다.

SetIntervalToWriteEngineStatus

예약된 이벤트가 아직 활성화되지 않았습니다. 서비스의 절차가 실행되면 예약된 절차가 활성화됩니다. 보장하기 위해 마지막 경고 쓰기 예약된 절차가 시작되고 마지막 경고 쓰기 절차를 클릭하고 실행하다 (재생) 버튼은 왼쪽 상단에 있습니다.

실행절차

3. 데이터베이스 모니터링

왼쪽의 프로젝트 콘텐츠 트리를 사용하여 com.vantiq.engines.EngineLastAlert 창을 입력한 후 클릭하세요. 모든 기록 표시 창에서. 결과 창에서 다음을 선택합니다. 자동 새로 고침, 간격을 다음으로 설정하십시오. 5 초그리고 클릭 OK.

예약된 프로시저가 실행되고 최신 서비스 상태가 데이터베이스에 기록될 때까지 XNUMX분 정도 기다립니다.

주 기록

있음을 주목하라 엔진 마지막 경고 systemId에 대한 인스턴스 0123456789 가장 최근의 내용이 포함되어 있습니다 속도 의 가치 40은 온도 값은 215이고 마지막 경고 엔진 과열 상태를 나타냅니다.

3부: 분할된 상태 사용

정의한 서비스는 전역 상태를 사용합니다. 그러나 많은 수의 개별 엔진을 지원하도록 애플리케이션을 실제로 확장하려면 대신 분할된 상태를 사용해야 합니다. 서비스 상태를 분할함으로써 Vantiq 클러스터의 구성원 간에 서비스를 나누고 각 파티션에 독립적으로 액세스할 수 있습니다. 이를 통해 동시 처리가 가능하고 규모에 따른 성능이 최적화됩니다. 분할된 상태에 대한 자세한 내용은 다음을 참조하세요. 상태 저장 서비스.

1. 그룹별 분할

Partitioned State를 사용하도록 서비스를 변환하는 첫 번째 단계는 다음을 정의하는 것입니다. 방법 데이터를 분할합니다.

com.vantiq.engines.EngineMonitor 서비스, ​​다음으로 이동 구현 탭을 열고 센서읽기0 인바운드 이벤트 핸들러(처리) 속도이벤트 이벤트 유형). 흐름 제어 팔레트 섹션에서 그룹별 분할 사이의 링크에 대한 작업 센서읽기 임무와 저장속도 일. SplitByGroup 작업을 클릭하고 이름을 바꿉니다. SplitBySystemId.

SplitBySystemId

를 클릭하십시오 수정하려면 클릭하세요. 구성 SplitBySystemId 일. 설정 그룹별 재산 이벤트.시스템 ID. 그러면 시스템/엔진 ID별로 인바운드 이벤트가 분할됩니다.

SplitBySystemId 구성

다음으로 센서읽기1 인바운드 이벤트 핸들러(처리) 온도이벤트 이벤트 유형). 드래그 앤 드롭 그룹별 분할 사이의 링크에 대한 작업 센서읽기 임무와 과열체크 일. SplitByGroup 작업을 클릭하고 이름을 바꿉니다. SplitBySystemId. 마우스 오른쪽 버튼으로 SplitBySystemId 작업 및 선택 기존 작업 연결. 선택 경고 없음 로 작업 이름 클릭 OK. 사이의 링크를 삭제합니다. 센서읽기   경고 없음 작업.

SplitBySystemId1

마지막으로를 클릭하십시오. 수정하려면 클릭하세요. 구성 SplitBySystemId 일. 설정 그룹별 재산 이벤트.시스템 ID. 그러면 시스템/엔진 ID별로 인바운드 이벤트가 분할됩니다.

서비스를 저장합니다.

2. 이벤트 처리기 작업 업데이트

와 더불어 온도이벤트 인바운드 이벤트 핸들러 com.vantiq.engines.EngineMonitor 서비스가 아직 열려 있습니다. 검색 속도 작업을 클릭하고 수정하려면 클릭하세요.. 오른쪽 링크를 클릭하시면 변환 재산.

이후 검색 속도 변환 작업은 이제 SplitByGroup 작업 아래에 있으며 변환은 다음과 같은 상태 개체에서만 작동됩니다. 단편 분할된 국가의; 즉, 단일 항목에 대한 항목입니다. 그룹별 열쇠. 그래서 구성된 시각적 변화 변경해야합니다

com.vantiq.engines.EngineMonitor.speedGet(event.systemId)

로 변환.

 OK 변환을 저장하려면 OK 다시 구성을 저장합니다. 서비스를 저장합니다.

3. 파티션 유형 보기

온 클릭 주 정부 섹션 상단에 구현 탭. 클릭 전역 상태 유형: 섹션을 확장합니다. 서비스에는 여전히 하나의 전역 상태 유형 속성이 포함되어 있습니다. 마지막 경고. 해당 전역 상태 유형 속성은 더 이상 필요하지 않으므로 삭제합니다.

다음을 클릭하십시오 분할된 상태 유형: 해당 섹션을 확장합니다.

PartitionedState속성

두 개의 새로운 분할된 상태 속성이 서비스 정의에 자동으로 추가되었습니다. 속도 속성은 엔진의 키로 지정된 Concurrent.Map() 객체입니다. 시스템 아이디 가장 최근의 속도 상태를 포함합니다. 그만큼 마지막 경고 속성은 엔진의 키로 지정된 Concurrent.Map() 객체입니다. 시스템 아이디 가장 최근의 경고 상태를 포함합니다. 이 지도는 엔진별로 분할됩니다. 시스템 아이디 Vantiq 클러스터 구성원 전체에 걸쳐.

이것들은 생성된 상태 속성 업데이트하면 안 됩니다.

4. writeLastAlert 절차 업데이트

분할된 상태와 함께 제대로 작동하도록 데이터베이스에 상태를 저장하는 데 사용되는 프로시저를 업데이트하세요. 프로시저는 다음과 같이 선언되어야 합니다. 다중 파티션 보다는 글로벌 전역 상태가 아닌 분할된 상태에 액세스하기 때문입니다. 다중 분할 프로시저는 서비스의 분할 상태에 액세스할 수 있으며 예약되면 모든 파티션에서 실행됩니다.

로 이동 구현 탭을 선택하고 쓰기엔진상태 절차. 다음 VAIL로 절차 텍스트를 업데이트합니다.

package com.vantiq.engines
multi partition PROCEDURE EngineMonitor.writeLastAlert()

var alertStates = lastAlert
if (alertStates) {
    for (alertState in alertStates) {
        UPSERT com.vantiq.engines.EngineLastAlert(alertState.value)
    }
}

프로시저를 글로벌에서 다중 파티션으로 변환할 때 유일한 차이점은 다음과 같습니다.

  • 프로시저 헤더를 업데이트하여 다중 파티션 상태 접근 수정자
  • 상태 개체를 사용하는 대신 상태 개체에 직접 액세스합니다. 얻는 사람 순서.

PartitionedWriteState프로시저

이제 절차 헤더에 다음이 포함됩니다. multi partition 을 사용하는 대신 상태에 직접 액세스합니다. 얻는 사람 프로시저. 다중 분할 프로시저는 서비스의 분할 상태에 접근할 수 있으며, 예약되면 모든 파티션에서 실행됩니다.

서비스를 저장합니다.

5. 출력 확인

1부에서는 두 소스, com.vantiq.engines.SpeedSensor   com.vantiq.engines.TemperatureSensor 시뮬레이션된 센서 이벤트의 흐름을 시작하기 위해 활성화되었습니다. 이제 이 두 소스에서 생성된 이벤트는 엔진 모니터링 시스템의 분할된 상태 버전을 구동해야 합니다.

왼쪽의 프로젝트 콘텐츠 트리를 사용하여 com.vantiq.engines.EngineLastAlert 창을 입력하고 클릭하세요. 모든 기록 표시. 결과 창에서 다음을 선택하세요. 자동 새로 고침, 간격을 다음으로 설정하십시오. 5 초그리고 클릭 OK. 딸깍 하는 소리 모두에게 삭제 이전 기록을 모두 제거하려면

예약된 프로시저가 실행되고 최신 서비스 상태가 데이터베이스에 기록될 때까지 XNUMX분 정도 기다립니다.

상태 레코드분할됨

구현 탭으로 이동합니다. com.vantiq.engines.EngineMonitor 서비스를 클릭하고 마지막 경고 받기 절차. 이 절차는 엔진 ID별로 서비스 상태를 가져옵니다. 이제 상태에 주목하세요. 얻는 사람 partitionKey가 필요합니다.

파란색을 클릭하십시오 연극 왼쪽 상단 모서리에 있는 버튼을 클릭하여 절차를 실행합니다. 0123456789 파티션 키로 클릭하고 실행하다.

결과는 다음과 유사할 것으로 예상됩니다.

{
   "systemId": "0123456789",
   "lastAlert": "Your engine is overheating: check for a malfunctioning fan or a coolant leak."
   "temperature": 215,
   "speed": 40
}

맺음말

축하해요! 상태 저장 서비스 튜토리얼을 완료했습니다.

이 튜토리얼에서는 다음을 배웠습니다.

  • 앱 구성요소와 해당 구성요소를 사용하는 이벤트 핸들러를 업데이트하는 방법
  • 서비스의 상태 속성을 사용하여 애플리케이션 상태를 메모리에 저장하는 방법입니다.
  • 정기적으로 실행되도록 프로시저를 예약하는 방법
  • 매우 많은 수의 키를 지원하기 위해 분할된 상태를 사용하는 방법

이별의 메시지: 데이터베이스를 어떻게 사용하고 있는지 항상 다시 생각해 보세요. 가능하다면 Stateful Services를 사용하여 애플리케이션의 상태를 메모리에 저장하세요. 시스템이 데이터베이스에 덜 의존할수록 성능이 향상되고 프로덕션으로 확장하기가 더 쉬워집니다.

저작권 © 2024 VANTIQ, Inc.
이 글이 도움 되었나요?
0 5의 점 받음
5 별 0%
4 별 0%
3 별 0%
2 별 0%
1 별 0%
5
피드백을 공유해주세요
이 기사를 어떻게 개선할 수 있나요?
이전 보기 지우면 좋을거같음 . SM
다음 시스템 모델러