ThingWorx 트랜잭션 이해
데이터베이스 작업 카테고리
ThingWorx Platform에서 데이터베이스 작업은 세 가지 카테고리로 분류됩니다.
• 속성 쓰기와 같이 항상 일괄 처리되는 데이터 쓰기 작업.
• 트랜잭션을 비동기적으로 릴리즈하기 위한 ThingWorx 9.3.2에서 업데이트된 데이터 읽기 작업.
• 트랜잭션을 취득한 다음 최상위 서비스가 완료될 때까지 트랜잭션을 보유하는 모델 작업.
데이터베이스를 처리하는 모든 작업이 동기적으로 수행되고 따라서 즉시 연결을 사용하는 것은 아니기 때문에 데이터베이스 작업 대신 모델 작업이라고 지칭합니다.
모델 작업은 시스템 엔티티에 영향을 주는 작업입니다. 예를 들면, 다음과 같습니다.
• 속성 정의 변경: 기본 유형 추가, 제거, 변경 등.
• 구성 변경.
데이터 작업은 비동기적으로 수행되는 데이터베이스 작업이며, 효율성을 위해 일괄 처리될 수 있습니다. 예를 들면, 다음과 같습니다.
• 지속 속성의 경우에도 속성 값 업데이트.
• DataTable, Stream 또는 ValueStream에 엔트리 추가.
비동기 트랜잭션을 사용하는 플랫폼 서비스
이 단원에는 트랜잭션을 비동기적으로 릴리즈하는 ThingWorx Platform 서비스가 나열됩니다.
• DataTableThing
◦ GetDataTableEntries
◦ GetDataTableEntryByKey
◦ GetDataTableEntryCount
◦ FindDataTableEntries
◦ QueryDataTableEntries
◦ SearchDataTableEntries
• "스트림" 사물 템플릿을 사용하는 사물
◦ GetStreamEntryCount
◦ QueryStreamData
◦ QueryStreamEntries
◦ QueryStreamEntriesWithData
◦ GetStreamEntry
• ValueStream 또는 RemoteValueStream 사물 템플릿을 사용하는 사물
◦ Get<Type>StreamEntry
▪ Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
◦ Query<Type>StreamEntries
▪ Integer, Long, Number, Boolean, Location, String, Vec2, Vec3, Vec4, ThingCode, InfoTable, Image, DateTime
◦ QueryMultiPropertyStreamEntries
확장을 통해 해당 속성을 ValueStream에 로그하는 사물은 이러한 API를 사용하여 스트림을 질의할 수 있습니다.
서비스 제작 모범 사례
이 단원에서는 서비스가 일부 일반 지침을 따르는 경우에만 특정 상황에서 데이터베이스 연결을 사용할 수 있도록 하는 모범 사례를 권장합니다. 이러한 모범 사례는 다음과 같습니다.
• 모델 변경을 수행하기 전 질의 작업 수행
• 모델 변경을 수행한 후 완료된 장기 실행 작업 최소화
사용 중인 연결이 없을 때 장기 실행 작업 수행
모델 작업을 수행하기 위해 연결을 읽어들인 후에는 서비스가 종료될 때까지 해당 연결을 해제할 수 없습니다. 모델 작업 전에 질의 작업을 수행하면 질의를 위해 연결을 읽어들인 다음 나중에 다른 작업이 완료되는 동안 해당 연결을 해제할 수 있습니다. 모델에 영향을 주는 장기 실행 작업이 있는 경우 연결을 사용하기 전에 이러한 작업을 먼저 수행해 보십시오.
varthing = Things["SomeThing"];
// Instead of
thing.AddPropertyDefinition();// connection acquired
varhistory = thing.QueryPropertyHistory();
vardata = makeSomeExternalCalls(history);// connection held here
varvalue = calculateValue(data);// and here
thing.SetPropertyValue(value);
// Do this
varhistory = thing.QueryPropertyHistory();// connection acquired & released
vardata = makeSomeExternalCalls(history);// no connection
varvalue = calculateValue(data);// nor here
thing.AddPropertyDefinition();// connection acquired
thing.SetPropertyValue(value);
비동기 서비스 사용
모델이 변경된 후 장기 실행 작업을 수행할 수 없는 경우 비동기 서비스를 사용하면 다음 명령으로 이동하기 전에 응답을 기다리지 않기 때문에 연결 경쟁을 완화할 수 있습니다. 이렇게 하면 처리 리소스를 더 적게 사용하진 않지만 서비스의 응답성을 향상시킬 수 있습니다. 비동기 서비스는 값을 직접 반환할 수 없기 때문에 경우에 따라 실행 가능하지 않을 수 있지만 효율적인 리소스 사용에 도움이 될 수 있습니다.
varthing = Things["SomeThing"];
thing.AddPropertyDefinition();// connection acquired
asyncDoHttpRequestAndUpdateProperty(property);// request handled in another thread
// connection released (before async call completes)
모델 작업의 정의
이 설명서에서는 데이터베이스를 처리하는 모든 작업이 동기적으로 수행되고 따라서 즉시 연결을 사용하는 것은 아니기 때문에 데이터베이스 작업 대신 모델 작업이라고 지칭합니다.
모델 작업은 데이터와 달리 시스템 엔티티에 영향을 주는 작업입니다. 예를 들면, 다음과 같습니다.
• 속성 정의 변경: 기본 유형 추가, 제거, 변경 등
• 구성 변경
일부 데이터베이스 작업이 비동기적으로 수행되며 잠재적으로 효율성을 위해 그룹으로 정렬됩니다. 일반적으로 다음과 같은 데이터 작업이 포함됩니다.
• 지속 속성의 경우에도 속성 값 업데이트.
• DataTable, Stream 또는 ValueStream에 엔트리 추가.