ThingWorx의 데이터 중심 모델링
올바른 모델 요소 선택
이 단원의 나머지 부분을 이해하기 위해 ThingWorx 모델링 개념을 익히는 것이 좋습니다. 자세한 내용은
Composer의 ThingWorx 모델 정의를 참조하십시오. ThingWorx의 모델은 물리적 및 솔루션 환경을 논리적으로 표현한 것입니다. 이 논리적 표현은 사물, 사물 템플릿, 사물 형태 및 데이터 셰이프와 같은 기본 제공 모델 요소 템플릿의 인스턴스를 작성함으로써 실현됩니다. 이 단원에서는 ThingWorx 모델 기반 솔루션의 데이터 스토리지 측면을 설계하는 방법에 대한 권장 사항을 제공합니다. ThingWorx에서는 데이터를 저장하는 여러 다양한 옵션을 사용할 수 있습니다. 각 옵션을 이해하면 데이터에 대한 최적의 스토리지 솔루션을 결정할 때 유용합니다.
|
크기 조정 안내서를 ThingWorx가 사용자의 요구사항을 충족하는 데 필요한 프로세싱 및 메모리 양을 예측하는 데 유용한 방법으로 사용할 수 있습니다.
|
기본 유형 및 데이터 셰이프란 무엇입니까?
ThingWorx 기본 유형은 데이터 저장소뿐만 아니라 Edge의 특정 데이터 유형으로부터 ThingWorx 응용 프로그램 개발 환경을 격리시키는 추상화 계층을 제공합니다. 이를 통해 ThingWorx 응용 프로그램은 데이터 저장소에 제약을 받지 않게 되며 기본 데이터베이스 스키마를 변경할 필요 없이 런타임에 기본 유형을 변경할 수 있게 됩니다.
데이터 셰이프는 필드 정의와 관련 메타데이터의 명명된 집합으로, 각 필드는 기본 유형입니다. 데이터 셰이프는 기본 유형이 필드의 데이터 유형과 유사한 관계형 데이터베이스 테이블의 개념과 대략 일치합니다.
사물 속성
ThingWorx Platform으로의 데이터 수집에서 가장 중요한 진입점은 연결된 장치가 ThingWorx 내의 사물로 모델링되는 사물 속성을 통한 것입니다. 일반적인 설명은
사물 속성을 참조하십시오.
다음 사용 사례는 사물 속성을 저장하는 데 사용할 수 있는 다양한 데이터 저장소 옵션을 보여줍니다. 여기서 트랙터 사물에는 최대 RPM, 엔진 온도 및 마지막 오일 서비스 날짜와 같은 속성이 포함된 트랙터 엔진 사물 형태가 있습니다.
속성에는 읽기 전용, 지속됨 및 로그됨의 세 가지 데이터 스토리지 옵션이 있습니다. 위의 예제에서는 다음이 권장됩니다.
• 최대 RPM - 런타임에 변경하지 않아야 하는 정적 값이므로 읽기 전용 옵션을 사용합니다. 그러나, 엔진을 업그레이드할 경우 기본값을 변경하여 이 값을 변경할 수 있습니다.
• 마지막 오일 서비스 날짜 - 이 속성은 런타임에 변경할 수 있고 최신 날짜에만 관심이 있으므로 지속됨 옵션을 사용합니다. 또한 지속됨 옵션을 사용하면 ThingWorx 서버가 재시작된 후에도 지속됩니다.
• 엔진 온도 - 기본적으로 시계열 데이터인 계속 바뀌는 값이므로 로깅됨 옵션을 사용합니다.
스트림
스트림은 시계열 데이터의 blob을 저장하기 위한 것입니다. 각 스트림 엔트리에는 타임스탬프, 소스, 소스 유형, 필드 값, 데이터 태그 및 위치 필드가 있습니다. 필드 목록은 데이터 셰이프에 정의되고 스트림과 연관됩니다. 이 필드 목록의 필드 값은 스트림에 json 또는 텍스트 blob으로 단일 열에 저장됩니다. 따라서, 단일 필드 값을 질의하면 일치하는 필드 값을 포함하는 행 전체가 반환됩니다. 즉, 짧은 시간 동안 지정된 소스의 필드 값을 반환하도록 스트림을 질의할 때 데이터 검색 속도가 더 빠릅니다. 특정 필드 값에 대해 조건을 사용하여 질의하면 응용 프로그램 수준에서 필드 값 데이터를 필터링해야 합니다.
모범 사례는 다음과 같습니다.
• ThingWorx 모델에서 사물과 직접 연관되지 않은 임의의 시계열 데이터에 사용(가치 스트림과 비교)
• 필드 값을 기준으로 광범위한 필터링을 사용하여 저장된 데이터를 질의할 필요가 없을 때 사용
• 질의가 작은 시간 간격으로 제한된 경우 사용
• 오랜 시간 범위 동안 여러 소스에 걸쳐 질의하지 않도록 방지
가치 스트림
가치 스트림은 사물의 개별 속성을 시계열 데이터로 저장하기 위한 것입니다. 사물의 속성은 시계열 데이터로 간주되도록 로깅됨으로 정의되어야 하며 데이터 스토리지에 가치 스트림을 사용해야 합니다. 각 가치 스트림 엔트리에는 타임스탬프, 소스, 속성 유형, 속성 이름 및 속성 값이 있습니다. 이는 단일 행의 필드 값 열에 전체 필드 값 집합을 json/텍스트 blob으로 저장하는 것이 아니라 가치 스트림이 각 속성 값을 연관된 소스 및 타임스탬프와 함께 별도의 행에 저장하기 때문에 스트림의 스토리지 모델과 대조됩니다. 가치 스트림에서 사물의 속성 데이터를 질의하는 경우 해당 속성에 대해서만 값이 반환됩니다.
가치 스트림은 사물 제어 모델에 유용합니다. 색인 성능을 향상하려면 여러 값 스트림 간에 사물을 분할하는 것이 가장 좋습니다. 모범 사례는 아니지만, 특정 대용량 데이터 수집 시나리오(크기 조정 안내서에 설명된 수집 속도 이상)에서 별도의 데이터베이스 인스턴스를 가리키는 여러 지속성 공급자를 만드는 것도 고려할 수 있습니다. 이렇게 하면 데이터가 데이터베이스의 서로 다른 테이블로 이동합니다. 여러 데이터베이스가 추가된 경우 지속성 공급자가 특정 데이터베이스를 가리키도록 할 수 있습니다. 이 시나리오에는 데이터 마이그레이션도 필요합니다.
RDMS(PostgreSQL, MSSQL)를 사용하면 다른 사물에 대한 다른 가치 스트림에서 가져온 레코드를 포함하여 모든 레코드가 데이터베이스의 동일한 테이블에 작성됩니다.
PostgreSQL을 사용하면 PostgreSQL 데이터베이스의 ValueStream에 대한 테이블에서 각 행은 속성 하나에 대해서만 레코드를 보유합니다. 즉, 가치 스트림은 각 속성의 값 변경을 독립적으로 추적하며, QueryPropertyHistory 서비스를 사용한 후 데이터 흐름에서 사물의 각 속성을 확인하고 모든 최신 업데이트(각각 업데이트 시간이 다름)를 하나의 인포테이블 결과에 수집합니다.
데이터 테이블
데이터 테이블은 근본적으로 ThingWorx 응용 프로그램 개발을 단순화하고 가속화하는 데 사용할 수 있는 표준 관계형 데이터베이스 테이블의 추상화인 ThingWorx 엔티티입니다. 그러나, 데이터 테이블의 백엔드 구현은 관계형 데이터베이스 테이블과 동일하지 않으며 관계형 데이터베이스 테이블의 완전한 유연성을 제공하지 않습니다. 첫 번째 클래스 ThingWorx 엔티티로 데이터 테이블을 사용하면 ThingWorx 모델 수준에서 데이터 액세스 기능을 훨씬 더 쉽게 처리할 수 있습니다. 데이터 테이블과 연관되는 데이터 셰이프는 데이터 테이블의 열 또는 필드와 해당 기본 키를 정의합니다. 그러나, 성능 및 확장성 측면에서 표준 관계형 데이터베이스 테이블을 대체하기 위한 것은 아닙니다.