TimescaleDB 的结构
数据自动按时间和空间分片(chunk)。
1、partition key(分区键)
是由一个表上的一个列或者多个列组成,用于确定某一行特定数据分布在哪个分区上,用create table 语句来定义。
数据库分区分表的定义:https://wenku.baidu.com/view/596d8b6c7e21af45b307a82a.html
2、server 服务器
3、query across time 跨时间查询
4、chunks 分区在TimescaleDB中被称为chunk。
5、query across space 跨查询空间
6、time oldest --latest 时间 旧 新
详解:http://mini.eastday.com/mobile/170411142745879.html
TimescaleDB的结构
TimescaleDB是一个针对时序数据的开源数据库。它的目标是兼具NoSQL数据库的天然扩展能力和传统关系型数据库的可靠性与查询支持。为此,我们已经设计了一个新的数据集群,围绕Postgres核心进行构建,并运行在每个服务器上。
TimescaleDB 支持现代时序数据库的关键特征,如图1中归纳的那样。
Hypertables and Chunks(超表和块)。在一个更高的水平,数据库暴露了一个抽象的连续的表格:一个元表格,横跨所有的空间和时间间隔,这样你就可以通过普通的SQL语句查询它,一个元表格使用标准的带有列名称和类型的模型,在集群部署环境中,一列指定了一个建立在可额外分割的数据集上的分区键。
![](https://05.imgmini.eastday.com/mobile/20170411/20170411142745_5477dae734daaca2d8282bc8adc008e5_1.jpeg)
图1:TimescaleDB的关键特征
在内部,TimescaleDB自动将hypertable分割成块,一个块对应着一个根据指定时间间隔和此分区键的区域确定的二维空间。每个块使用表中数据库表实现,这个表自动地被放置在某一个数据库节点中(或者在多个节点间复制),虽然这个细节很大程度上被隐藏。一个单一的TimescaleDB部署可以存储多个hypertable,每个hypertable可以有不同的表结构。
构建于PostgreSQL之上。选择了构建于PostgreSQL之上,而不是从零构建,TimescaleDB获得的四个直接的收益。
坚如磐石般的可靠性。在其核心,TimescaleDB的可靠性来自于Postgres20余年的开源记录和强大的开发者社区
成熟的生态系统。TimescaleDB用户可以通过标准ODBC、JDBC或者PostgreSQL连接第三方可视化工具、BI工具,接口管理、网络平台和ORM。
标准接口。TimescaleDB用户不需要重新学习一门新的查询预演和管理框架,可以利用现有的SQL语句和PostgreSQL。
操作使用简易。用户可以重用已知的可信赖的方法来备份,快照,活跃复制以及进行其他操作。
实际上,所有的TimescaleDB实现都是在Postgres之上的扩展,而不是一个拷贝。所以,TimescaleDB可以安装在一个标准的Postgres上。
参考: http://mini.eastday.com/mobile/170411142745879.html关键概念
Hypertables
与你的数据交互的主要点是Hypertable,一个在所有的空间和时间上间隔上连续的抽象的表,可以通过SQL进行查询。
Hypertable是一个由列名称和类型的标准模式定义,至少有一个列指定一个时间值,和一个(可选)列指定一个分区键,在其之上数据集还可以额外分区。
一个timescaledb部署可以存储多个hypertables,各有不同的模式。
在timescaledb创建Hypertable是两个SQL命令:创建表(使用标准的SQL语法),其次选择create_hypertable()。
Chunks
在内部,timescaledb自动将每个Hypertable分块,一个块对应于根据特定的时间间隔和分区键的空间区域的“二维”分裂(例如,使用散列)。
每个块使用一个标准数据库表实现,该数据库表自动地放置在数据库节点上(或在多个节点之间复制),尽管这个细节在很大程度上对用户是不可见的。
块大小合适,确保所有的B-树表的索引可以驻留在内存中,避免在这些树中任意位置修改时发生抖动。
此外,避免过大的块,我们可以避免移除被删除的数据时昂贵的“清理”操作,根据自动保留策略,运行时执行这样的操作,只需删除块(内部表),而不是删除个别行。
Standard SQL
所有数据的查询、插入、更新操作timescaledb可以通过标准的选择、插入、更新等实现,SQL命令。