Bootstrap

还在使用NoSQL数据库?为IoT选择TSDB

作者: 王鹏飞

IoT应用程序会生成大量的数据。虽然PostgreSQL功能强大,但能应用规模不多。使用TSDB可以将应用场景规模放大20倍,并应用在IoT领域。

我们所说的“物联网”的根本,并不是字面意义上的“物”和“连接”,这些都早在十年内不是痛点了,而“数据”才是当前互联网面临的最大难题。这表示很多数据,在每天有更多的生产业务、食品生产、火车票等系统连接到互联网并实现自动化,创造出越来越多的传感器数据流。这数以百万计的每个设备的数据量将倍数增加,你就会得到一个指数级增长的信息流,这些大数据将被合理的使用,用于做出更好的业务决策,给最终用户提供更好的体验。

大多数从事这些计划的工程团队最终都将所有这些数据存储在多个数据库中:元数据存储在关系数据库中,时间序列数据存储在NoSQL中。然而,这些数据库的操作方式不同,运行多个形数据库体系增加了不必要的操作和应用程序复杂性。

其实我们没必要那么做。这里将向您展示如何将所有物联网关系和时间序列数据保存在PostgreSQL中,以及这如何带来更简单的操作、更好得关联数据和更好的易用性。我们还将强调PostgreSQL与物联网相关的其他强大的功能,包括查询能力、灵活的数据类型、地理空间支持和丰富的生态系统。

如果您觉得TSDB是您的物联网项目的理想数据库,那么请联系我们提供帮助。

一,PostgreSQL能有很好的扩展性

“PostgreSQL能扩展应用在我的IoT数据比率?”经常有人会这么问。PostgreSQL的扩展性是大家所关注的首要问题。 IoT的后端需要支持高数据摄取率,而随着数据集的增长,写入PostgreSQL将会比较缓慢。

经过我们深入研究,对于时间序列数据,如果数据库的架构方式正确,您可以将PostgreSQL扩展到每秒数十万次插入,即使是在单一节点上。所以我的团队滴普科技FastData团队开发了TSDB,这是我们推出的一个新的时间序列数据库。TSDB通过时间和空间划分数据,同时向用户呈现单个连续表(称为“超表”)实现显著性能改进。最重要的是,TSDB在这样做时就像一个普通的PostgreSQL实例(实际上打包为PostgreSQL扩展)。我们通过将10亿行数据分别加载到PostgreSQL和TSDB进行了基准测试。结果如下:

简而言之,在按比例插入数据时,TSDB快20倍以上。在此对比测试中,TSDB的平均插入速率为111k行(1.11M度量)/秒,而PostgreSQL插入性能下降到5k/秒。但最重要的是,TSDB可以扩展到10亿行。

二,能使用一个数据库,为什么要用两个

我们刚刚看到TSDB如何将PostgreSQL扩展到大型工作负载,比如在物联网中。现在让我们看看它让我们做什么。

能够存储时间序列数据并存储关系数据是非常强大的。首先,它有一个更简单的堆栈。代替两个数据库(传感器数据的NoSQL、传感器元数据的关系数据),两者之间包含各种粘合代码,更不用说有两个数据库的操作难题……所以,您只需要一个数据库:

我们拿备份功能来举例。运行两个不同的数据库意味着两个不同的备份过程(以及更长的停机时间)。此外,如果系统是独立备份,则存在数据完整性问题的风险。想象一下这样的情况:你的时间序列数据有上一个小时的备份,但是你的关系数据昨天被备份了,那么您现在的时间序列数据引用了元数据丢失了。

一个数据库简单性设置会有其他优势:更简单的堆栈甚至在边缘很有用,那里运行一个数据库足够困难(由于资源限制),更不用说两个了。只需要一个数据库就能使物联网原型设计更容易,这样还有助于降低大型庞大的物联网项目的复杂性。

三,关于TSDB中的context

一个用于时间序列数据和元数据的单一数据库不仅可以简化堆栈:它还允许您向传感器数据添加上下文。因为如果您不知道您要测量什么,那么收集数据有什么意义?

这是一个例子:我们正在合作的一家公司正在开发一个物联网应用程序来监控制造过程。这个应用程序涉及到仔细检查装配线数据来发现缺陷,确保一个高质量的产品。大多数装配线数据本质上是时间序列:{machine_id、时间戳、测量}。然而,如果没有所有其他的操作元数据,这些数据本身就是毫无意义的:如当时的机器设置、行信息、移位信息等等。他们已经尝试将数据去规范化,但这在每次测量上增加了不合理的数据膨胀。

使用TSDB和PostgreSQL,可以保持元数据标准化,并在查询时添加必要的上下文(通过SQL联接)。例如,通过像这样的查询:(按机器显示特定线路上给定类型机器的平均温度,间隔5分钟统计)

四,使用SQL的好处

现在让我们聚焦物联网项目的价值:收集、分析和处理数据,以提高效用/效率,减少停机/浪费,并提供更好的产品和服务。换句话说,您需要的不仅仅是一个数据存储,您还需要一种简单的方法来从数据中获取更有效的信息来提供一些方案的决策。

这就是SQL的作用所在。虽然在过去几年中NoSQL相当流行,但事实是SQL相当强大,正在开始回归(这就是“NoSQL”现在被理解为“不仅是SQL”的原因之一)。

SQL包括相当多的有用的功能:例如,谓词(由辅助索引支持);多个聚合和排序;窗口函数、数学和统计函数库;等等。举个例子,以线性和对数尺度绘制天花板传感器的温度变化统计如下:

TSDB通过添加时间序列分析所需的新函数来增加SQL,例如,如上面一个例子的time_bucket和最后一个查询。

SQL还有另一个优势。您不需要培训工程师学习新的专门查询语言(或雇佣懂新的查询语言工程师),非技术用户也不需要严重依赖工程(和工程发布周期)来处理数据问题。换句话说,通过利用SQL,您可以将时间序列数据民主化,让组织中有更多的人员访问它。

五,TSDB支持灵活的数据类型(包括JSON)

还在羡慕MongoDB支持在关系数据库中扩展JSON?当您开始构建物联网产品时,您可能不知道您将关心哪些数据,也不考虑到特定的数据模式。或者以后您可能需要非常特定的数据结构(例如,数组)。

PostgreSQL支持广泛的数据类型。它允许半结构化数据(通过JSON/JSONB支持),但也允许各种其他数据类型,包括许多数字类型、几何类型、数组、范围类型和日期/时间类型。我们的一些物联网客户在JSONB中存储传感器数据,而且还允许建立索引,如下图

六,TSDB在地理空间方面的优势

目前很多系统的数据中通常有一个地理空间组件,表示物理东西存在于特定的空间中。特别是当事物在移动时,地理空间信息就很重要了。我们经常看到的一个物联网用例是资产跟踪:例如,跟踪用于车队管理的车辆,优化路线,减少破坏等。

TSDB被打包为PostgreSQL扩展,这意味着您可以同时运行许多其他PostgreSQL扩展。一个强大的扩展是PostGIS,它给PostgreSQL增加了丰富的地理空间支持(包括新的数据类型、功能等)。通过结合PostGIS与TSDB,您可以结合地理空间和时间序列数据创建一个可扩展的时空数据库。下图是纽约的出租车在一个时间段内的时空数据在grafana的展现。

七,基于PostgreSQL的TSDB是一个真实的生态系统

时间序列数据库不会单独运行。它们需要连接器,比如kafka这样的数据总线、Spark这样的流处理引擎,或者Sableau这样的BI工具。大多数时间序列数据库都相对较新,而且没有足够的时间围绕它们开发生态系统。另一方面,PostgreSQL已经存在了20多年了,社区已经围绕着它建立了一个广阔的生态系统。就像PostgreSQL一样,TSDB与最流行的数据总线、流处理器、数据可视化和BI工具(如下面所示的工具)配合一起使用。

八,基于PostgreSQL的TSDB具有很好的可靠性

你为物联网选择的数据库需要可靠的(而不会在凌晨3点叫醒你)。与网站或移动应用程序不同,物联网应用程序从一开始就通常部署在高价值的场景中。如果使用数据库监视生产线,则该数据库将不能出现停止或者关闭的情况。

这就是我们选择在PostgreSQL基础上扩展TSDB。在过去的20多年中,PostgreSQL已经在不同行业的各种关键任务应用程序中进行了验证和应用。还有另一个管理工具的生态系统,可以使可靠性更容易实现:包括流媒体复制、热待机等等。TSDB继承了这个相同级别的可靠性和生态系统。

九,选择PostgreSQL,选择TSDB

现在物联网的世界里有很多声音,很难决定为你的物联网项目使用什么数据库。但无疑最好的选择就是PostgreSQL,因为TSDB最终扩展到理物联网各个领域并优化时间序列数据优化SQL。

如果您正在构建一个新的物联网项目或当前正在与复杂的物联网之中难以抉择,请选择PostgreSQL并使用TSDB。

如果你对以上内容感兴趣且需要帮助的话,可以登录了解更多TSDB产品详情。