TimescaleDB 与PostgreSQL 数据库的比较(未完待续······)

42 篇文章 9 订阅
42 篇文章 22 订阅

文档:https://docs.timescale.com/v0.9/introduction/timescaledb-vs-postgres

为什么在关系数据库上使用TimescaleDB?

TimescaleDB相对于存储时间序列数据的vanilla PostgreSQL或其他传统RDBMS提供了三大优势:

· 数据采集率要高得多,尤其是在数据库规模较大的情况下。

· 查询性能从相当于数量级更大。

· 时间导向的功能。


由于TimescaleDB仍然允许您使用各种PostgreSQL功能和工具 - 例如,与关系表联接,可通过地理空间查询PostGIS,pg_dump和pg_restore,任何讲PostgreSQL的连接器 - 几乎没有理由不使用TimescaleDB在PostgreSQL节点中存储时间序列数据。

更高的摄取率

对于时间序列数据,TimescaleDB比PostgreSQL实现更高且更稳定的采集速率。正如我们的架构讨论中所描述的那样,只要索引表不能再适应内存,PostgreSQL的性能就会显着下降。

特别是,无论何时插入新行,数据库都需要为每个表的索引列更新索引(例如B树),这将涉及从磁盘交换一个或多个页面。在这个问题上抛出更多的内存只会拖延不可避免的,一旦您的时间序列表达到数千万行,每秒10K-100K +行的吞吐量就会崩溃到每秒数百行。

TimescaleDB通过大量利用时空分区来解决这个问题,即使在单台机器上运行也是如此。因此,对最近时间间隔的所有写入操作仅适用于保留在内存中的表,因此更新任何二级索引的速度也很快。

基准测试显示了这种方法的明显优势。数据库客户端插入适度大小的包含时间,设备标记集和多个数字指标(在本例中为10)的批量数据,以下10亿行(在单台计算机上)的基准测试模拟常见监控方案。在这里,实验在具有网络连接的SSD存储的标准Azure VM(DS4 v2,8核心)上执行。

我们观察到PostgreSQL和TimescaleDB对于前20M请求的启动速度大约相同(分别为106K和114K),或者每秒超过1M指标。然而,在大约五千万行中,PostgreSQL的表现开始急剧下降。在过去的100M行中,它的平均值仅为5K行/秒,而TimescaleDB保留了111K行/秒的吞吐量。

简而言之,Timescale在PostgreSQL的总时间的十五分之一中加载了十亿行数据库,并且吞吐量超过了PostgreSQL在这些较大规模时的20倍。

我们的TimescaleDB基准测试表明,即使使用单个磁盘,它在10B行以上也能保持其性能不变。

此外,用户在一台计算机上利用多个磁盘时,可以为数以十亿计的行提供稳定的性能,无论是采用RAID配置,还是使用TimescaleDB支持在多个磁盘上传播单个超级缓存(通过多个表空间传统的PostgreSQL表)。

卓越或类似的查询性能

在单磁盘机器上,许多只执行索引查找或表扫描的简单查询在PostgreSQL和TimescaleDB之间表现相似。

例如,在具有索引时间,主机名和CPU使用率信息的100M行表上,对于每个数据库,以下查询将少于5ms:

涉及对索引进行基本扫描的类似查询在两者之间也是等效的:

涉及基于时间的GROUP BY的较大查询 - 在面向时间的分析中很常见 - 通常在TimescaleDB中实现卓越的性能。

例如,当整个(超)表为100M行时,接触33M行的以下查询在TimescaleDB中速度提高5倍,而在1B行时速度提高约2倍。

而且,其他可以专门针对时间排序的查询可以在TimescaleDB中更高性能。

例如,TimescaleDB引入了基于时间的“合并追加”优化,以最小化必须处理以执行以下操作的组的数量(考虑到时间已经被排序)。 对于我们的100M行表,这导致查询延迟比PostgreSQL快396倍(82ms vs. 32566ms)。

我们将很快发布PostgreSQL和TimescaleDB之间更完整的基准测试比较,以及复制我们基准的软件。

我们的查询基准测试的高级结果是,对于几乎所有我们尝试过的查询,TimescaleDB都可以达到与PostgreSQL类似或优异(或极其优越)的性能。

与PostgreSQL相比,TimescaleDB的一项额外成本是更复杂的计划(假设单个可超集可由许多块组成)。 这可以转化为几毫秒的计划时间,这对于非常低延迟的查询(<10ms)可能具有不成比例的影响。

 

时间导向特征

TimescaleDB还包括一些传统的关系数据库中没有的面向时间的特征。这些包括特殊查询优化(如上面的合并追加),它为面向时间的查询以及其他面向时间的函数(下面列出了一些)提供了一些巨大的性能改进。

面向时间的分析

TimescaleDB面向时间分析的新功能,包含以下几个方面:

时间戳:标准的date_trunc函数的更强大的版本,它允许任意的时间间隔(例如5分钟,6小时等),以及灵活的分组和偏移量,而不仅仅是第二,分钟,小时等等。

最后和第一个聚合:这些函数允许您按另一个列的顺序获取一列的值。 例如,最后(温度,时间)将基于组内的时间(例如,一小时)返回最新的温度值。

这些类型的函数能够实现非常自然的面向时间的查询。 例如,以下财务查询打印每个资产的开盘价,收盘价,最高价和最低价。

 

 

注 :timescaledb和PG写入性能测试 , 这是 Kun_Tsai 大神写的测试,我把地址给大家,希望可以好好学习一下!!

 

 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值