Data Storage in ThingWorx

    Data storage in ThingWorx can take place three (3) manners :

    1. Data Tables
    2. Streams
    3. Value Streams


    Before beginning with above three topics one must also understand concept of :

    1. InfoTable
    2. DataShape



    What is InfoTable ?


    An InfoTable is zero indexed, ordered array of javaScript objects which expose  same properties. Since an InfoTable is an Array of Objects, it can also be thought of as a table where the array entries are rows and the object properties of each object in the array are the columns.

    For example :


    var people = [


               “name” : “Ravi”,

               “city” : “Mumbai”



               “name” : “Mohit”,
               “city” : “New Delhi”



    As you can see InfoTables only contains the same type of object.This is achieved using another ThingWorx specific mechanism called Data Shape



    What is Data Shape ?

    A DataShape is a specification of the required property names and return types each property of a JavaScript “Object” must have to be added to an InfoTable.

    DataShapes also contain other metadata about a property that is useful for formatting and displaying the InfoTable in a tabular format or Grid.

    They are essentially a schema mechanism for defining the required fields of a Thing in ThingWorx.




    Now that we have covered InfoTables and DataShapes, let us move towards core concepts of data storage



    1. Data Tables


    A ThingWorx Data Table Thing is similar to a standard relational database table. However, a Data Shape defines the columns of a Data Table. Data Tables can be used to store data in a ThingWorx application.



    The Configuration tab for a Data Table allows you to define additional table indexes. This is similar to a relational database table, where in addition to the primary key (the primary key is defined in the Data Shape), you need to query the table based on other fields. You should create an index for each set of filter criteria commonly used. This will have a significant impact on query performance.

    2. Streams

    Streams represent time series data. Therefore, each Stream has a timestamp plus additional fields. A ThingWorx Stream is a list of activities from Things or data associated with Things.

    A stream can be thought of as a table structure with certain predefined fields and any number of user-defined fields. User-defined fields are defined using DataShape.

    3. Value Streams

    ThingWorx Value Streams also provide time series information about a Thing’s property values.

    Value streams are similar to streams in terms of their end results however there is some noteworthy difference between Stream and Value Stream in manner in which data gets written and returned.


    Streams are independent data stores and can access data continuously:

    - Querying single column value returns entire row

    - Remain most beneficial for non-Thing-driven models

    - Scipts are required to write data to Streams

    For example : You can set up a timer and subscribe to the timer event and every time timer emits the event we can log data in stream.


    Value Streams store data from associated Thing’s property :

    - Querying Thing’s property data only returns values for that property

    - Scripts not required to write Thing property data to its Value Stream

    - Most useful for Thing-driven models




    Note : Data gets stored in the configured persistence provider.