Composer 中的 ThingWorx 模型定义 > 数据存储 > 持久化方案提供工具 > 使用 InfluxDB 作为持久化方案提供工具
使用 InfluxDB 作为持久化方案提供工具
概述
如果您的系统需要密集处理时间序列数据,并且您的实现在很大程度上依赖于值流或流进行数据的持久化/检索,那么,建议您在 ThingWorx 中使用 InfluxDB 作为 持久化方案提供工具。InfluxDB 是专为时间序列数据编写的高性能数据存储写入。它允许对同一数据进行高吞吐量的提取、压缩和实时查询。InfluxDB 可用作任何涉及大量时间戳数据的用例的数据存储,包括 DevOps 监控、日志数据、应用程序指标、IoT 传感器数据和实时分析。它还提供其他功能,包括数据保留策略 (RP) 等。InfluxDB Enterprise 针对时间序列数据需求提供了高可用性和高可扩展性的群集解决方案。
* 
仅 ThingWorx 8.4.0 及更高版本才能使用 InfluxDB。
InfluxPersistenceProviderPackage 可作为 PostgreSQL 或 MSSQL 默认安装的一部分。
* 
InfluxDB 数据提供工具目前仅支持值流和流。不支持数据表、wiki 和博客。
* 
InfluxDB 数据提供工具目前不支持导出功能。
* 
InfluxDB 不支持作为属性提供工具。
* 
InfluxDB 数据提供程序目前仅支持名为 "autogen" 的保留策略。在创建用于数据提供工具的数据库时,您可以指定策略名称和其他策略,如复制因子等。
InfluxDB Enterprise 和 ThingWorx 启动环境
* 
上图包括 InfluxDB Enterprise。对于 InfluxDB 开源,架构图相同,不同之处在于它只适用于一个节点。
涉及 InfluxDB Enterprise 的配置时,将在本文档中使用以下术语:
负载平衡器 - InfluxDB Enterprise 不能用作负载平衡器。管理员需要对其进行配置。
群集 - InfluxDB Enterprise 群集由两种类型的节点组成,即元节点和数据节点。
数据节点 - 所有原始时间序列数据都存在于该类型的节点中。为获得高可用性,您至少需要两个复制因子。
元节点 - 这些节点具有简单的作业,即保持状态一致。它们仅包含有关状态的基本信息,例如保留策略、用户和数据库。在高可用性环境中,至少需要三个元节点。
使用 InfluxDB Enterprise 的优点
如果您要寻找比当前其他数据库容量更高、速度更快的数据存储,那么 InfluxDB Enterprise 可以为您带来以下好处:
提高数据提取率
运行时数据可以具有多个数据信息库。例如,您可以在 PostgreSQL 中保留关系数据,同时将 InfluxDB 用于高容量流和值流数据。定义流或值流时,ThingWorx 使用默认运行时数据存储提供工具,但您可以将其配置为使用任何已定义的持久化方案提供工具。
* 
您仍可以从其他数据提供工具导出数据并导入 InfluxDB。ThingWorx 处理数据抽象。
云友好体系结构 (水平比例,仅适用于 InfluxDB Enterprise)
安装和配置 InfluxDB
* 
Influx 数据库的所有安装者都有责任阅读并理解为 InfluxDB 提供的所有安全相关文档。PTC 强烈建议使用安全配置安装和配置 InfluxDB,其中包括使用用户名和加强密码。
* 
此过程假定 ThingWorx 已安装。请参阅 安装 ThingWorx
1. 下载并安装 InfluxDB。
* 
Windows 中不支持 InfluxDB。以下步骤将使用 UNIX OS。
下载链接:
数据节点下载链接:
元节点下载链接:
2. 在 InfluxDB 内创建数据库。获取并运行 thingworxInfluxDBSetup.sh 脚本,以在 InfluxDB 中创建数据库。
* 
可在 PTC 支持门户网站上软件下载包的 install 文件夹中获取 thingworxInfluxDBSetup.sh 脚本。
以下示例命令使用默认保留策略创建数据库:
CREATE DATABASE thingworx with DURATION 365d REPLICATION 1 SHARD DURATION 30d NAME autogen
3. 创建 InfluxDB 用户。将使用以下示例命令创建用户:
CREATE USER twadmin WITH PASSWORD 'password' WITH ALL PRIVILEGES
4. 在 ThingWorx Composer 中,新建持久化方案提供工具。
5. “持久化方案提供工具包”字段中,选择 InfluxPersistenceProviderPackage
6. 单击“保存”
7. 单击“配置”选项卡,然后根据需要配置“连接信息”并“保存”。参考下表中的配置选项。
如果您使用持久化方案提供工具实例 (通过 InfluxDB 持久化方案提供工具包创建) 作为默认的 持久化方案提供工具,则可编辑下列流和值流队列配置设置。这些编辑随后可应用至所有流和值流。对于特定流或值流,不能更改这些设置。
* 
当切换某个值流的持久化方案提供工具 (例如,从 ThingworxPersistenceProvider 切换到 InfluxPersistenceProviderPackage) 时,任何实现值流的事物都必须调用 RestartThing 服务以检索写入到新的持久化方案提供工具的条目。如果没有重新启动事物,条目可以写入到数据库,但是,只有重新启动了事物后,才会检索到这些条目。
连接信息
名称
说明
默认值
连接 URL
数据库的 URL,您应该从该数据库中获取连接。
http://localhost:8086
数据库架构
要连接的架构。
thingworx
用户名
用于获取数据库连接的用户名。
thingworx
密码
用于获取数据库连接的密码。
不适用
流处理设置
名称
说明
基本类型
默认值
队列大小上限
队列中流条目的最大数量。达到指定的值后,后续条目将被拒绝。
数字
250000
清空流缓冲区之前的最长等待时间 (毫秒)
清空流缓冲区之前系统将等待的毫秒数。
数字
2000
处理线程数目
专用于流的处理线程数量。
* 
线程数目越少,InfluxDB 的性能更佳。InfluxDB 经过高度优化,可处理来自少量信道的数据。
数字
5
清空流缓冲区之前项的最大数量
清空流缓冲区之前可累积的项的最大数量。
数字
1000
处理块中流写入的最大次数
可在单个块中处理的最大流写入次数。
数字
2500
缓冲区状况扫描频率 (毫秒)。
检查指定速率值 (以毫秒为单位) 的缓冲区状态
数字
5
值流处理设置
名称
说明
基本类型
默认值
队列大小上限
队列中值流条目的最大数量。达到指定的值后,以下条目将被拒绝。
数字
250000
清空值流缓冲区之前的最长等待时间 (毫秒)
清空值流缓冲区之前系统等待的毫秒数。
数字
2000
处理线程数目
分配给值流的处理线程数量。
* 
线程数目越少,InfluxDB 的性能更佳。InfluxDB 经过高度优化,可处理来自少量信道的数据。
数字
5
清空值流缓冲区之前项的最大数量
清空值流缓冲区之前可累积的项的最大数量。
数字
500
处理块中值流写入的最大次数
可在单个块中处理的项的最大数目。
数字
2500
缓冲区状况扫描频率 (毫秒)
检查指定速率值 (以毫秒为单位) 的缓冲区状态
数字
5
8. 单击“常规信息”选项卡并选择 “活动”复选框。
9. 单击“保存”
最佳实践
系列限制
“系列”是 InfluxDB 中所记录事物及关联值流的唯一组合的总数。在处理指向少量事物和事物属性 (例如,10K 或 100K) 的高数据容量时,InfluxDB 性能良好。在 InfluxDB 中,默认情况下,系列总数限制为 100 万。您可以提高此限制,但一旦超出此限制,InfluxDB 性能会随着系列数的增加而逐渐降低。
若存在大量事物和属性,则您可选择具有高数据容量的事物和属性并将其指向 InfluxDB,以减轻 PostgreSQL 或 MSSQL 的压力。
或者,如果您想要将系列划分为多个服务器,可以将 InfluxDB 数据提供工具的多个实例指向不同的 InfluxDB 服务器实例。
写入限制
内存 60gb、单 VM,32 核的情况下,每秒写入 100K。如果超出此限制,会导致 ThingWorx 出现问题,将耗尽资源以致无法处理任何请求或作业,例如,写入数据库。此时,ThingWorx 将变为停止状态,而 InfluxDB 仍在写入到数据库。PostgreSQL 不会发生此问题,因为 PostgreSQL 成为了瓶颈,ThingWorx 永远不会达到耗尽资源以致无法处理内部任务的点。
SSL/安全连接
InfluxDB 支持 SSL 和 HTTPS 连接。如果不支持 ThingWorx 和 InfluxDB 之间的网络,则您可启用 SSL 和 HTTPS 连接来提高安全性。如果签名专用密钥保持安全状态,则自签名证书已足够。
已知的 InfluxDB 对属性基本类型的限制
在将属性记录到值流后,不能更改其基本类型。有关详细信息,请参阅 https://github.com/influxdata/influxdb/issues/3460
清除属性
PurgeAllPropertyHistoryPurgeSelectedPropertyHistoryPurgePropertyHistory 服务可用于从 InfluxDB 中清除属性。使用 startDateendDate 参数指定某一范围。