3. 数据存储
3.1 数据表
数据表类似于标准关系数据库表,但两者在性能方面有很大的差异。通常情况下,如果数据少于1000000行,则应使用数据表。对于较大的数据集,应使用关系数据库事物模板进行连接。数据形状用于定义数据表的列或字段。
3.1.1 数据表服务
提供许多用于从数据表(特定于数据表形状)中导入或获取数据的内置服务
3.1.2 数据表最佳业务实践
在很多情况下,可能无法确定何时使用数据表(相对于流或事物属性)。请使用以下指南:
- 如果您需要逐行处理数据(甚至是查询),请使用数据表;
- 如果数据是静态的查找表,请使用数据表;
- 如果您的数据不会发生更改。或者将在下次更改/加载时会被覆盖,并且与某个事物相关联,请为该事物创建一个信息表属性并分配正确的数据形状。通过这种方式,可通过事物来访问数据,如果是与事物相关的数据,则是合乎逻辑的。
- 如果是事件序列数据,请使用流
3.1.3 数据表的大小限制
数据表存储仅受数据库有访问权限的可用磁盘空间的限制。除了这一个限制之外,性能取决于数据表中数据行的数量。
- 要求查询仅执行几秒钟时,数据表不得超过100000行;
- 任何事物超过100000行(在PostreSQL或Neo4j中)时都将开始导致查询执行速度变慢,而且行数越多减速越明显;
- 对于数据量超过100000行的数据集,为获得最佳性能,应使用外部关系数据库(并通过数据库事物进行连接)
【流】
流表示时间序列数据。因此,每个流都有时间戳和附加字段。ThingWorx流是指事物或与事物相关联的数据的活动列表。
3.2 值流
ThingWorx值流提供有关事物属性值的时间序列信息。
ThingWorx中的流和值流之间有一些值得注意的差异,主要差异是数据写入和返回的方式。
- 流是独立的数据存储,并且可以连续访问的数据。即,查询单列值将返回整个行。
- 值流存储来自关联事物属性的数据。即,查询某事物的属性数据,将仅返回该属性的值
值流中的这种数据存储方法有助于消除数据流稀疏的数据表。值流中的数据以事物为中心进行访问,为多租户提供了内置支持。此外,脚本不需要将事物属性数据写入其值流。
基于这些差异,流对于非事物驱动的模型仍然是最有用的,而值流对于事物驱动的模型是最有用的。
值流也可以在联合情景下使用,例如值流数据被写入另一台ThingWorx服务器。
3.3 持久化方案提供工具
在ThingWorx中,值流、流、数据表、博客和 wiki 都是数据提供工具。数据提供工具是用于存储运行时数据的数据库。运行时数据是指组成事物后所保留的数据,而且可由所连接的设备用来存储其数据(例如温度、湿度或位置)。模型提供工具用于存储事物的元数据。持久化方案提供工具的初始设置为模型提供工具和数据提供工具使用一个数据库,但是管理员可以根据需要将它们分开。