Postgres:物联网的新基础?

导语: 物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。对于物联网来说,时序数据库是满足其需求的基础设施之一。本文作者分析了物联网数据库的一般需求,并且结合PostgreSQL实现了自己的时序数据库TimescaleDB。本文是作者对TimescaleDB设计和实现的简要介绍。


PostgreSQL是如何突然成为了物联网应用程序和服务的理想平台。

Postgres:物联网的新基础?_第1张图片

注:这是基于我们2月份印度PGConf主题演讲(完整视频)[1]。今年5月,我们将在物联网世界[2]发表类似的演讲。(我们现在正在泽西城的PostgresConf——来打个招呼吧!)[3]

Postgres:物联网的新基础?_第2张图片

物联网数据的详细探查


流行的科幻小说通常描绘的是充满机器的未来。

Postgres:物联网的新基础?_第3张图片

因此,大量的机器(或物联网)数据已出现在越来越多的地方:

  • 工业机器:制造我们大部分的东西。

  • 运输和物流:我们周围的人和物品是如何转移的。

  • 建筑管理和智能家居:我们如何生活和保护我们的家和企业

  • 农业:我们如何养活这个星球

  • 能源与公共事业:我们如何为我们的世界提供动力

  • (还有更多)

Postgres:物联网的新基础?_第4张图片

这里有来自三个数据源的数据:一个建筑物,一个农场和一个工厂。数据按时间排序定期到达。当一个新的数据点出现,我们将它加到现有的数据集中。

Postgres:物联网的新基础?_第5张图片

这里我们看到数据集是一组随时间收集的数据。同样,数据集本质上是时间序列的。

为什么物联网选用Postgres?

为物联网选择Postgres[5]有很多理由:

  • 关系模型+JOINs: 正如我们刚才看到的,关系模型非常适合于物联网。

  • 可靠性: 数十年的软件开发和生产部署导致了一个坚如磐石的数据库。

  • 易用性: 开发人员和业务分析人员已经知道如何使用的查询语言(SQL),以及dba已经知道如何操作的数据库。

  • 广泛的生态系统:最大的兼容可视化工具的生态系统,后端系统,操作实用工具(例如,备份,复制),等等。

  • 灵活的数据类型(包括JSON):一组广泛的数据类型,包括(但不限于)数字、字符串、数组、JSON/JSONB。

  • 地理空间支持:通过PostGIS[6],增加了对地理对象和位置特定查询的支持。

  • 趋势:Postgres可能是目前所有开源数据库中最强大的一个(这就是为什么数据库引擎被命名为Postgres,它是2017年的顶级数据库管理系统[7])。 


但是为什么Postgres目前没有被用于物联网?

有些人已经开始使用Postgres。如果您的写入速度很低,并且只存储了几百万行时间序列数据,Postgres可能会满足您的需求。

Postgres:物联网的新基础?_第6张图片

随着数据集的增长,插入性能急剧下降。(插入吞吐量作为PostgreSQL 9.6.2的表大小的函数,在Azure标准DS4 v2(8核)机器上运行10个工作线程,使用基于ssd的(高级LRS)存储。)

我们作为物联网平台的前身


对于我们来说,为物联网的工作负载扩展Postgres不仅仅是一个学术问题,而且是我们公司在以前所面临的一个实际问题。

Postgres:物联网的新基础?_第7张图片早期版本的TimescaleDB。


我们公司最初是从iobeam,一个物联网数据分析平台开始的。我们取得了一定的成功,为我们的客户收集了大量的机器时间序列和关系数据。我们需要把数据存储在某个地方。


然而,我们发现当时业界数据库只提供两种选择:

  1. 关系数据库(例如PostgreSQL, MySQL)是可靠的、易于使用和性能的,但是伸缩性很差。

  2. 非关系型(也称为“NoSQL”)数据库(例如Cassandra, InfluexDB),它的伸缩性更好,但不可靠,性能更差,更难以使用,也不支持关系数据。

但是鉴于我们的物联网工作负载由时间序列和关系数据组成,我们唯一的选择是同时使用两种数据库。这导致了其他问题:它将我们的数据集分割成孤岛,导致应用层需要做复杂的连接,并要求我们维护和操作两个不同的系统。

针对物联网扩展Postgres


对于物联网的工作负载,我们是如何扩展Postgres的:

  1. 我们确定了主要的瓶颈:数据集的内存/磁盘交换时间。

  2. 然后我们认识到时间序列的工作负载与传统的数据库(或OLTP)工作负载有非常不同的特性:

Postgres:物联网的新基础?_第8张图片

正如我们所看到的,传统的数据库工作负载倾向于对随机位置进行更新,而更新通常需要复杂的事务。

洞察# 1:合适大小的分块


我们可以根据时间来划分数据,这样每个分区或数据块都是合适大小的,这样的话可以使得所有的数据和索引都能在内存中运行。如果大小划分的恰到好处的话,内存磁盘间的数据交换将被最小化(或者即使是最近的或“热”的块也会被消失)。

洞察#2:Hypertable


Hypertable,跨所有分区的单个虚拟表,它运行起来就像一个普通的Postgres表,并隐藏了用户的所有复杂性。

洞察# 3:支持SQL


但后来我们意识到有一条更简单的方法:支持SQL。每个人都知道SQL,有很多关于如何使用SQL查询的文献,还有大量的介绍SQL的资料和工具。对于目前不适合用来进行时间序列分析的SQL(和PostgresSQL),可以通过udf和查询-计划/查询-执行级别的优化来轻松地改进。(这有一些例子[13]。)

Postgres:物联网的新基础?_第9张图片当然,问题的关键在于细节:块管理、可识别的查询、快速的元数据路由,执行Hypertable-as-a-vanilla-table保证还需要在C和PL/pgSQL级别上进行大量工作以获得正确的结果(查看更多[14])。

我们的结果:20x更高的插入,2000x更快的删除,1.2x- 14000x更快的查询


可以从结果中看到这种架构的好处:

Postgres:物联网的新基础?_第10张图片

TimescaleDB可以支持每秒100k +行插入,或者每秒1M + metrics/秒。

Postgres:物联网的新基础?_第11张图片

我们的方法可以获得比普通Postgres高达10,000倍的查询速度和2000倍的快速删除

  • 关系模型+Joins:Hypertable和关系表共存

  • 可靠性、易用性、生态系统:我们的设计不会影响底层存储层,并且保持同样的SQL语法,所以它的操作就像和使用Postgres感觉一样。

  • 灵活的数据类型(包括JSON)、地理空间支持:类似地,这种方法与所有Postgres原生数据类型和扩展(如PostGIS)保持兼容。

  • 趋势:作为一个扩展,设计与Postgres相兼容,并将继续受益于Postgres的持续改进(也允许我们回馈社区)。


意外的物联网平台?


现在我们可以为物联网扩展Postgres,我们还可以在Postgres之上选择使用各种应用程序和工具:例如,Kafka、RabbitMQ、MQTT、Apache Spark、Grafana、Tableau、Rails、Django等等。

Postgres:物联网的新基础?_第12张图片

如果了解我们的历程是有帮助的,欢迎你用同样的方法扩展自己Postgres。但是如果你更想节省时间,你也可以使用TimescaleDB[16](开源,Apache 2)。这是您的选择。我们在这可以提供帮助[17]。

参考链接:

[1] https://www.youtube.com/watch?amp=&v=sFHZJ61DmZk

[2] https://tmt.knect365.com/iot-world/speakers/ajay-kulkarni#developers-conference-security-data-ai_the-inadvertent-iot-platform-postgresql

[3] https://twitter.com/TimescaleDB/status/986605501424259073

[4] https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563

[5] https://blog.timescale.com/choose-postgresql-for-iot-19688efc60ca

[6] http://postgis.net

[7] https://db-engines.com/en/blog_post/76

[8] https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

[9] https://blog.timescale.com/time-series-data-postgresql-10-vs-timescaledb-816ee808bac5

[10] http://www.timescale.com/about

[11] https://blog.timescale.com/when-boring-is-awesome-building-a-scalable-time-series-database-on-postgresql-2900ea453ee2

[12] https://blog.timescale.com/raised-16m-from-benchmark-nea-to-understand-machines-time-series-data-iot-9eff8213c15c

[13] http://docs.timescale.com/v0.9/api#analytics

[14] https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

[15] https://blog.timescale.com/timescaledb-vs-6a696248104e

[16] https://github.com/timescale/timescaledb

[17] http://slack-login.timescale.com

活动预告:

6 月 1 ~ 2 日,GIAC 全球互联网架构大会将于深圳举行。GIAC 是高可用架构技术社区推出的面向架构师、技术负责人及高端技术从业人员的技术架构大会。今年的 GIAC 已经有腾讯、阿里巴巴、百度、今日头条、科大迅飞、新浪微博、小米美图、Oracle、链家、唯品会、京东、饿了么、美图点评、罗辑思维、ofo、LinkedIn, Pivotal 等公司专家出席。

本期 GIAC 大会上,IOT部分精彩的议题如下:

Postgres:物联网的新基础?_第13张图片

参加 GIAC,盘点2018最新技术。点击“阅读原文”了解大会更多详情。

你可能感兴趣的:(Postgres:物联网的新基础?)