There are three types of Models that can be defined at the time of creating models for your IoT applications. The three models are:
- DataModel
- ThingModel
- AppModel
See Models for details.
In TQL Model development is a three step process -
- Definition
- Deploy (compilation)
- Queries (instantiation, update, delete, subscription)
See also lifecycle of models.
Model Instances
Once models are defined and deployed the meta structure of the definition is stored in memory.
Before Find queries can find anything from the models, they must be instantiated, or populated with data. The result of model instantiation is called Model Instances. Multiple model instances can be created from the same model (definition). Model instance data is persisted in the storage (TQLCache), as defined at the time of the deployment.
Even though TQLEngine uses SQL type of database technology to persist model instances, they are stored in a schema-less way, not in a relational format. This preserves the the performance at scale.
For example: Here is the definition of a ThingModel - PhidgetSensorModel that combines PhidgetSensorFacet.
Definition
<ThingFacet Name="PhidgetSensorFacet"> <Integer Name="SensorValue" Update="auto" KnownBy="PhidgetSensorAction"/> <String Name="SensorURL" Default="phid://"/> <String Name="SensorInterfaceIndex"/> <String Name="SensorType"/> <String Name="SensorInterfaceType"/> <String Name="SensorValueFormat"/> <String Name="Simulated"/> </ThingFacet> <ThingModel Name="PhidgetSensorModel" Combines="PhidgetSensorFacet"> <Sid Name="phidId"/> </ThingModel>
Deploy and Create:
The instances of PhidgetSensorModel is created using Create TQL Query.
<Query> <Create> <PhidgetSensors> <SensorURL>phid://</SensorURL> <SensorType>Rotation</SensorType> <SensorInterfaceType>PhidgetInterfaceKit</SensorInterfaceType> <SensorValueFormat>Raw</SensorValueFormat> <SensorInterfaceIndex>0</SensorInterfaceIndex> <SensorValue value="$Null()" version="1"/> <Simulated>true</Simulated> </PhidgetSensors> </Create> </Query>
The Result of Model Instance Creation is:
Note that there is Status returned for every attribute that gets created.
<Create Status="Success"> <PhidgetSensors> <phidId>KNUBPHLOAAAAUAABA6EJCI75</phidId> <SensorValue Status="Success+Created:1:1457740291438;" Value="" Version="1"/> <SensorURL Status="Success+Created:1:1457740291442;" Value="phid://" Version="1"/> <SensorInterfaceIndex Status="Success+Created:1:1457740291443;" Value="0" Version="1"/> <SensorType Status="Success+Created:1:1457740291444;" Value="Rotation" Version="1"/> <SensorInterfaceType Status="Success+Created:1:1457740291444;" Value="PhidgetInterfaceKit" Version="1"/> <SensorValueFormat Status="Success+Created:1:1457740291445;" Value="Raw" Version="1"/> <Simulated Status="Success+Created:1:1457740291445;" Value="true" Version="1"/> </PhidgetSensors> </Create>
Find Model Instances
After Model Instances are created, you can Read them using Find Query with constraints.
<Query> <Find format="all"> <PhidgetSensors> <SensorURL ne =""/> </PhidgetSensors> </Find> </Query>
Find Query Result
<Find Status="Success" Format="all"> <Result> <PhidgetSensors QName="SimpleModel.MyModels.PhidgetSensors"> <phidId>KNUBPHLOAAAAUAABA6EJCI75</phidId> <SensorValue Value="" Known="60" Version="1" Timestamp="1457740291438" DateTime="2016-03-11 15:51:31.438" QName="SimpleModel.MyModels.PhidgetSensors.SensorValue" FName="SensorValue"/> <SensorURL Value="phid://" Known="phid://" Version="1" Timestamp="1457740291442" DateTime="2016-03-11 15:51:31.442" QName="SimpleModel.MyModels.PhidgetSensors.SensorURL" FName="SensorURL"/> <SensorInterfaceType Value="PhidgetInterfaceKit" Known="PhidgetInterfaceKit" Version="1" Timestamp="1457740291444" DateTime="2016-03-11 15:51:31.444" QName="SimpleModel.MyModels.PhidgetSensors.SensorInterfaceType" FName="SensorInterfaceType"/> <Simulated Value="true" Known="true" Version="1" Timestamp="1457740291445" DateTime="2016-03-11 15:51:31.445" QName="SimpleModel.MyModels.PhidgetSensors.Simulated" FName="Simulated"/> <SensorInterfaceIndex Value="0" Known="0" Version="1" Timestamp="1457740291443" DateTime="2016-03-11 15:51:31.443" QName="SimpleModel.MyModels.PhidgetSensors.SensorInterfaceIndex" FName="SensorInterfaceIndex"/> <SensorType Value="Rotation" Known="Rotation" Version="1" Timestamp="1457740291444" DateTime="2016-03-11 15:51:31.444" QName="SimpleModel.MyModels.PhidgetSensors.SensorType" FName="SensorType"/> <SensorValueFormat Value="Raw" Known="Raw" Version="1" Timestamp="1457740291445" DateTime="2016-03-11 15:51:31.445" QName="SimpleModel.MyModels.PhidgetSensors.SensorValueFormat" FName="SensorValueFormat"/> </PhidgetSensors> </Result> </Find>
Status: This is a transient attribute returned as part of the result of TQL Create/Save, Update and Delete operations. It is not persisted.