简介
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;
其设计目标是实现分布式和水平伸缩扩展。
它有三大特性:
1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
2. Metrics(度量):你可以实时对大量数据进行计算
3. Eevents(事件):它支持任意的事件数据
特点
- schemaless(无结构),可以是任意数量的列
- Scalable
- min, max, sum, count, mean, median 一系列函数,方便统计
- Native HTTP API, 内置http支持,使用http读写
- Powerful Query Language 类似sql
- Built-in Explorer 自带管理工具
API
InfluxDB 支持两种api方式
- HTTP API
- Protobuf API
Protobuf 还未开发完成, 官网文档都没有
如何使用 http api 进行操作?
比如对于foo_production
这个数据库,插入一系列数据,可以发现POST
请求到 /db/foo_production/series?u=some_user&p=some_password
, 数据放到body里。
网络
InfluxDB默认使用下面的网络端口:
- TCP端口
8086
用作InfluxDB的客户端和服务端的http api通信 - TCP端口
8088
给备份和恢复数据的RPC服务使用
另外,InfluxDB也提供了多个可能需要自定义端口的插件,所以的端口映射都可以通过配置文件修改,对于默认安装的InfluxDB,这个配置文件位于/etc/influxdb/influxdb.conf
。
NTP
InfluxDB使用服务器本地时间给数据加时间戳,而且是UTC时区的。并使用NTP来同步服务器之间的时间,如果服务器的时钟没有通过NTP同步,那么写入InfluxDB的数据的时间戳就可能不准确。
对比MYSQL
概念 | MySQL | InfluxDB |
数据库(同) | database | database |
表(不同) | table | measurement |
列(不同) | column | tag(带索引的,非必须)、field(不带索引)、timestemp(唯一主键) |
- tag set:不同的每组tag key和tag value的集合;
- field set:每组field key和field value的集合;
- retention policy:数据存储策略(默认策略为autogen)InfluxDB没有删除数据操作,规定数据的保留时间达到清除数据的目的;
- series:共同retention policy,measurement和tag set的集合;
- 示例数据如下: 其中census是measurement,butterflies和honeybees是field key,location和scientist是tag key
数据存储样式如下:
name: census
————————————
time butterflies honeybees location scientist
2015-08-18T00:00:00Z 12 23 1 langstroth
2015-08-18T00:00:00Z 1 30 1 perpetua
2015-08-18T00:06:00Z 11 28 1 langstroth
2015-08-18T00:06:00Z 11 28 2 langstroth
存储引擎
新的InfluxDB的存储引擎看起来和LSM树很像。它具有wal和一组只读数据文件,它们在概念上与LSM树中的SSTables类似。 TSM文件包含排序,压缩的series数据。
InfluxDB将为每个时间段创建一个分片。例如,如果您有一个持续时间无限制的存储策略,则会为每7天的时间段创建一个分片。 这些每一个分片都映射到底层存储引擎数据库。 每一个这些数据库都有自己的WAL和TSM文件。
参考:
1, InfluxDB中文文档
2, influxdb