TimescaleDB数据库


随笔 笔记 TimescaleDB

什么是TimescaleDB

TimescaleDB是唯一支持完整SQL的开放源代码时间序列数据库。为快速摄取和复杂查询优化,TimescaleDB易于使用,如传统的关系数据库,但按以前为NoSQL数据库保留的方式进行缩放。特别是,这使得TimescaleDB是操作分析的理想候选者。TimescaleDB是在Apache 2许可证下分发的。

为什么要创建另一个时序数据库?

时间序列数据出现在越来越多的地方:监控和DevOps,传感器数据和物联网,财务数据,物流数据,应用程序使用数据,等等。通常,这种数据体积大,性质复杂(例如,与单个时间相关联的多个测量和标签)。这意味着存储时序数据既需要规模又有效的复杂查询。然而,实现这两个属性仍然是难以捉摸的。用户通常面临着NoSQL的水平可伸缩性和关系数据库的查询能力之间的权衡。我们需要提供两者的东西,所以我们建造了它。

为什么我要使用TimescaleDB数据库?

随着时间成为测量数据的更关键的维度,TimescaleDB使开发人员和组织能够更多地利用其功能:分析过去,了解现在和预测未来。 在查询层面统一时序数据和关系数据可消除数据孤岛,并使演示和原型更容易实现。 可扩展性和完整的SQL接口的结合赋予组织内各种各样的人员(例如开发人员,产品经理,业务分析师等)直接提出数据问题。 换句话说,通过支持广泛使用的查询语言,TimescaleDB可以确保您的问题受到您的想象力的限制,而不受数据库的限制。

你真的支持“所有的SQL”吗?

是的,所有的SQL,包括:二级索引,JOIN,窗口函数。 事实上,对于外部世界来说,TimescaleDB看起来像一个PostgreSQL数据库:您连接到数据库就好像它是PostgreSQL一样,并且您可以像处理PostgreSQL一样管理数据库。 任何与PostgreSQL连接的工具和库都将自动与TimescaleDB协同工作。

Why SQL

SQL是世界上使用最广泛的查询语言,用于与数据库交互并处理数据。 我们希望TimescaleDB易于使用且功能强大。 由于SQL的使用非常广泛,因此它允许整个组织访问其数据,为分析数据提供不同视角,并赋予人员各自角色的权力。 它还允许将驻留在PostgreSQL表中的数据轻松迁移到TimescaleDB hypertables。 换言之,我们希望确保您的查询仅受限于您的想象,而不是查询语言。 要深入了解为什么我们对SQL有积极意义,请阅读以下博客文章:Why SQL is beating NoSQL, and what this means for the future of data

怎么写数据?

https://docs.timescale.com/v0.9/using-timescaledb/writing-data#insert

怎么读数据?

https://docs.timescale.com/v0.9/using-timescaledb/reading-data

支持哪些SQL功能?

我们支持所有的SQL,包括二级索引,复杂谓词,联接,窗口函数,CTE等。另外,我们扩展SQL以引入新的语义,使时序操作更容易。 在幕后,我们还优化了PostgreSQL查询计划器,以使数据库能够正确推理时序数据,这在某些情况下会导致查询延迟超过10,000倍。

TimescaleDB可以扩展多少?

我们首先专注于在单个节点上扩展TimescaleDB。在我们关于标准云虚拟机的内部基准测试中,我们定期测试TimescaleDB100亿行,同时保持每秒100200k行的插入速率(每秒1-2百万个公制插入/秒)。

随着更强大的硬件,用户已经将TimescaleDB扩展到500亿行数据,同时每秒钟支持400k行插入。在这种情况下,客户利用了我们允许用户弹性添加磁盘(即RAID)的事实,以便扩展单个节点上的容量。随着磁盘的添加,块被重新分配,类似于它们将如何分布在节点上。

就这点而言,为扩展而实施的主要设计决策与允许TimescaleDB在多台服务器上以线性方式水平扩展的方式大致相同。 TimescaleDB旨在将流行的NoSQL数据库的可扩展性与RDBMS系统支持的本机查询复杂性相结合。请阅读关于聚类的更多细节。

TimescaleDB如何扩展?

TimescaleDB的体系结构利用了时序数据的两个关键属性:

时间序列数据在很大程度上是不可变的。新的数据不断地到达,通常是写入(插入)到最新的时间间隔,而不是作为对现有记录的更新。

工作负载在时间和空间上都有自然的划分。

TimescaleDB通过自动将数据分割成二维“块”(即较小的PostgreSQL表),执行操作并优化跨所有块的查询规划来利用这些属性。将数据划分成块,确保在数据被插入到数据库中时,将最近的表索引保存在内存中。然而,所有这些复杂性都是从用户抽象的,它们被暴露在一个单一的表接口(一个“超表”)中,它在PostgreSQL中作为一个正常的表来正常工作。有关更多信息,请参阅本博客文章: Time-series data: Why (and how) to use a relational database instead of NoSQL

是否有集群版本,我该如何尝试?

我们经常发现,当人们询问对“集群”的支持时,可能会遇到一些不同的事情:

高可用性:作为PostgreSQL扩展,可以使用流式复制来设置Timescale的热备用。这与使用vanilla PostgreSQL设置只读副本一样(尽管我们不推荐使用逻辑复制)。

缩放可用存储空间的数量:Timescale允许您弹性添加磁盘以放大单个可放大的容量。

提高插入率:根据您的使用情况,我们有用户在单个节点上插入100-400K行插入/秒。

提高查询吞吐量:在确保高可用性的同时,可以与主节点并行查询副本以提高查询吞吐量。

查询并行化:今天,TimescaleDB利用了PostgreSQL 10中提供的增强的并行化支持。

回顾一下,我们目前支持通过PostgreSQL流式复制进行只读聚类,以实现高可用性并提高查询吞吐量。通过弹性增加磁盘空间(特别是在云环境中使用网络连接的磁盘简单),TimescaleDB的单节点可伸缩性(超过5000亿行/ 50TB)适用于这些只读群集。

完整的横向扩展集群(即数据量超过5000亿行,采集率> 300K行插入/秒)正在开发中,并将利用当今单节点TimescaleDB中已有的自动分区功能。

欲了解更多信息,请联系[email protected]

什么是hypertables chunks

https://docs.timescale.com/v0.9/introduction/architecture

应该如何配置chunks

https://docs.timescale.com/v0.9/using-timescaledb/hypertables#best-practices

hypertable chunks是如何跨越空间维度来确定的?

所有的高容量块都会随时间自动分区,这对于正确定义块的大小是必要的,这样表格索引的B-trees可以在插入过程中驻留在内存中,以避免在修改那些树中的任意位置时发生的颠簸。 另外,用户可以通过空间维度(分区键)在设备ID,客户ID或其他唯一ID之类的东西上创建可分区的分区。 空间分区使用散列:每个不同的项目散列到N个存储桶之一。 空间分区的主要目的是在同一时间间隔内启用并行I / O,或者在定期对单个设备/客户/股票代码执行范围查询时构建较小的表。 有关空间分区的更多详细信息,请参阅https://docs.timescale.com/v0.9/using-timescaledb/hypertables#best-practices

为什么我会在PostgreSQL上使用TimescaleDB

阅读我们的TimescaleDB-PostgreSQL基准测试:

TimescaleDB vs. PostgreSQL for time-series data

Problems with PostgreSQL 10 for time-series data

总而言之,TimescaleDB提供:

易用性:TimescaleDB更容易使用,因为创建分区(或者称为“块”)是为用户自动执行的。当数据速率和音量波动时,块也将被系统自适应地调整大小。所有的自动化、自适应分区的复杂性都被抽象在一个“hypertable”后面,用户与PostgreSQL表的交互就如同一个“hypertable”。

更高的摄取规模:TimescaleDB看到一旦表达到中等大小(例如,数以百万计的行数为10s),吞吐量超过PostgreSQL20X。虽然vanilla PostgreSQL适合于低容量的时间序列数据,但它不能很好地扩展大多数时间序列应用程序产生的数据量,特别是当在单个服务器上运行时。特别是,vanilla  PostgreSQL具有较差的适中表的写入性能,并且随着数据量在时间上线性增长,这个问题随着时间的推移而变得越来越差。当表索引不能适应内存时,出现这些问题,因为每个插入将转换成许多磁盘获取,以便在索引的B-tree的部分中进行交换。TimescaleDB解决了这个问题,通过它的重(自适应)利用时间空间分区,即使当运行在一台机器上。因此,所有对最近时间间隔的写入仅限于保留在内存中的表,因此更新任何辅助索引也是很快的。

高级(或类似)查询性能:在TimescaleDB中,可以具体地考虑时间排序的查询可以更高效(100000倍的速度)。在单盘机器上,至少有许多简单的查询只执行索引查找或表扫描,在PostgreSQLTimescaleDB之间也有类似的性能。

更快的数据删除:为了节省空间或实现数据保留策略,vanilla PostgreSQL需要昂贵的“真空化”操作来对与这些表相关联的磁盘存储碎片进行碎片整理。TimescaleDB避免了抽真空操作,并通过指定要删除的数据比指定的时间段更长,从而容易地执行数据保留策略。有关更多信息,请参见数据保留。

扩展的面向时间的特征:TimescaleDB包括不包含在vanilla  PostgreSQL中的特定于时间序列的特征,并且完全不同于TimescaleDB,还有更多。

TimescaleDBPostgreSQL的兼容性如何?

TimescaleDB作为PostgreSQL的扩展实现,它引入透明的可扩展性和性能优化,以及时间序列特定的特征(例如,任意聚合、数据保持策略)。TimescaleDB与任何与标准PostgreSQL连接器通信的第三方工具连接。TimescaleDB支持PostgreSQL支持的相同扩展、工具和驱动程序。您可以继续运行现有的PostgreSQL数据库,并使用当前的可视化和报告工具。

TimescaleDB如何处理地理空间数据?

作为PostgreSQL的扩展,TimescaleDB可以很好地适用于PostGIS。 例如,请参阅我们的教程 https://docs.timescale.com/v0.9/tutorials/tutorial-hello-nyc#tutorial-postgis ,使用纽约市出租车数据上的PostGISTimescaleDB。 我们正在积极探索TimescaleDB的地理空间功能(即按位置分区)的范围。 如果您有地理空间组件的使用案例,请发送电子邮件至[email protected],我们很乐意与您讨论。

我可以用TimescaleDB做什么?

TimescaleDB非常适合从SQL接口中受益的时序工作负载。 SQL具有多种优点:大多数开发人员已经知道的查询语言;丰富的功能和实用程序;以及广泛的工具,连接器和可视化选项生态系统。此外,由于SQL JOINSTimescaleDB中本机支持,因此可以在查询时组合来自不同源的数据(例如,将存储在PostgreSQL表中的关系数据与存储在TimescaleDB hypertable中的时序数据组合)。这种将关系数据与时序数据一起存储的功能使开发人员能够简化他们的堆栈,从而将复杂的多边形结构体系减少到单个运行分析数据库。

由于这些优势,TimescaleDB目前部署在各个行业,包括制造业,能源,公用事业,采矿,石油和天然气,金融,广告技术,智能空间等等。用例包括复杂的监控和分析;预测应用程序,模型,消费者和连接的机器的性能和行为;为运营分析工作流程和仪表板提供支持;进行质量保证和性能测试。

TimescaleDB什么时候是一个很好的选择?

略。

TimescaleDB什么时候不是一个很好的选择?

简单读取要求:如果您只需要快速键值查找或单列累积,则内存或列导向数据库可能更合适。前者显然不能扩展到相同的数据量,但是,后者的性能明显低于更复杂的查询。

非常稀疏或非结构化的数据:尽管TimescaleDB利用PostgreSQLJSON / JSONB格式的支持,并且相当有效地处理稀疏性(空值的位图),但在某些情况下,无模式体系结构可能更合适。

重要的压缩是一个优先事项:基准测试显示在ZFS上运行的TimescaleDB获得约4倍的压缩率,但压缩优化的列存储可能更适合于更高的压缩率。

不频繁或离线分析:如果响应时间较慢(或响应时间限于少量预先计算的度量标准),并且您不希望许多应用程序/用户同时访问该数据,则可以避免使用数据库,而只是将数据存储在分布式文件系统中。

TimescaleDB开源许可证是什么?

Apache 2.0.

有没有可以加入的TimescaleDB社区或组?

是。 我们建议首先向GitHubhttps://github.com/timescale/timescaledb/issues报告问题(或通过发送电子邮件[email protected])并加入我们的Slack小组:https://slack-login.timescale.com/ 

我可以获得支持或商业许可吗?

可以。 请联系我们获取更多信息 - [email protected]

我在哪里可以获得TimescaleDB源代码?

GitHubhttps://github.com/timescale/timescaledb/issues

如何安装TimescaleDB

https://docs.timescale.com/v0.9/getting-started/installation/mac/installation-homebrew

如何更新现有安装?

https://docs.timescale.com/v0.9/using-timescaledb/update-db

如果翻译有问题,欢迎大家提出并及时改正,本人英语水平极其有限,不喜勿喷!!

https://blog.csdn.net/qq_28289405/article/details/80566903

猜你喜欢

转载自blog.csdn.net/qq_28289405/article/details/80567422