时序数据库InfluxDB

时序数据库InfluxDB

一、什么是InfluxDB?

InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。

InfluxDB特征:

– 无结构(无模式):可以是任意数量的列(tags)。

– 可以设置metric的保存时间。

– 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计。

– 支持存储策略:可以用于数据的删改(influxDB没有提供数据的删除与修改方法)。

– 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。

– 原生的HTTP支持,内置HTTP API。

– 支持类似SQL语法。

– 支持设置数据在集群中的副本数。

– 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。

– 自带web管理界面,方便使用(登入方式:http://< InfluxDB-IP >:8083)。

– 最关键的一点,也是我采用的原因,支持Grafana画图展示。

PS:有了InfluxDB+Grafana后,你就可以写一些简单的程序了,可以只负责写后端逻辑部分,数据都可以存入InfluxDB,然后通过Grafana展示出来。

二、InfluxDB基本概念

在具体的讲解influxdb的相关操作之前先说说influxdb的一些专有名词,这些名词代表什么。先看下面一段Influxdb中的表信息。

|

1

2

3

4

5

6

|

select * from disk;

name: disk

time count device free hostname used used_percent


1502089306183159978 1 /data 80 server01 100 60.33

1502089342879496791 1 /data 90 server02 110 68.33

|

InfluxDB是时序数据库,所以怎么都绕不开时间,第一纵列time存储着时间戳,而时间戳是与数据进行关联,这样才能将时间和数据进行展示。

InfluxDB名词

database:数据库,根关系型数据库一个概念。

measurement:数据库中的表,就是关系型数据库中的表。

points:表里面的一行数据,就是关系型数据库中的记录。

InfluxDB中独有的一些概念

Point由时间戳(time)、标签(tags)和值(field)组成。

time:每条数据记录的时间,也是数据库自动生成的主索引。

tags:各种有索引的属性。

fields:各种记录的值。

tag set:tag在InfluxDB中会按照字典序排序,不管是tag-key还是tag-value,只要不一致就分别属于两个tag set,例如hostname=server01,device=/data和hostname=server02,device=/data就是两个不同的tag set。

还有三个重要的名词:Series、Retention policy和Shard

Series:相当于是InfluxDB中一些数据的集合,在同一个database中,retention policy、measurement、tag sets完全相同的数据同属于一个series,同一个series的数据在物理上会按照时间顺序排列存储在一起。

Retention policy:存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB会定期清除过期的数据。

Shard:在InfluxDB中是一个比较重要的概念,它和Retention policy相关联。每一个存储策略下会存在许多shard,每一个shard存储一个指定时间段内的数据,并且不重复,例如7点-8点的数据落入shard0中,8点-9点的数据则落入shard1中。每一个shard都对应一个底层的tsm存储引擎,有独立的 cache、wal、tsm file。

TSM存储引擎主要由几个部分组成:cache、wal、tsm file、compactor。

Cache:相当于是LSM Tree中的memtabl。插入数据时,实际上是同时往cache与wal中写入数据,可以认为cache是wal文件中的数据在内存中的缓存。当InfluxDB启动时,会遍历所有的wal文件,重新构造cache,这样即使系统出现故障,也不会导致数据的丢失。cache中的数据并不是无限增长的,有一个maxSize参数用于控制当cache中的数据占用多少内存后就会将数据写入tsm文件。如果不配置的话,默认上限为25MB,每当cache中的数据达到阀值后,会将当前的cache进行一次快照,之后清空当前cache中的内容,再创建一个新的wal文件用于写入,剩下的wal文件最后会被删除,快照中的数据会经过排序写入一个新的tsm文件中。

WAL:WAL文件的内容与内存中的cache相同,其作用就是为了持久化数据,当系统崩溃后可以通过wal文件恢复还没有写入到tsm文件中的数据。

TSM File:单个tsm file大小最大为 2GB,用于存放数据。

Compactor:Compactor组件在后台持续运行,每隔1秒会检查一次是否有需要压缩合并的数据。

主要进行两种操作,一种是cache中的数据大小达到阀值后,进行快照,之后转存到一个新的tsm文件中。另外一种就是合并当前的tsm文件,将多个小的tsm文件合并成一个,使每一个文件尽量达到单个文件的最大大小,减少文件的数量,并且一些数据的删除操作也是在这个时候完成。

三、InfluxDB目录与文件

InfluxDB的数据存储主要有三个目录,默认情况下是meta, wal以及data三个目录。

meta用于存储数据库的一些元数据,meta目录下有一个meta.db文件。

|

1

2

|

/var/lib/influxdb/meta/

└── meta.db

|

wal目录存放预写日志文件,以.wal结尾。

|

1

2

3

4

5

|

/var/lib/influxdb/wal/

└── test

└── autogen

    └── 22

        └── _00002.wal

|

data目录存放实际存储的数据文件,以.tsm结尾。

|

1

2

3

4

5

|

/var/lib/influxdb/data/

└── test

└── autogen

    └── 22

        └── 000000001-000000001.tsm

|

上面几张图中,test为数据库名,autogen为存储策略名称,再下一层目录中的以数字命名的目录是shard的ID值。

存储策略下有一个shard,ID为22,shard存储了某一个时间段范围内的数据。再下一级的目录则为具体的文件,分别是.wal和.tsm结尾的文件。

四、InfluxDB安装配置

1)安装配置

|

1

2

3

4

5

6

7

8

|

安装influxdb;

$ yum install influxdb

启动influxdb;

$ systemctl start influxdb

连接influxdb;

$ influx -database 'test' -host 'localhost' -port '8086'

|

2)相关文件

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

|

$ rpm -ql influxdb

配置文件;

/etc/influxdb/influxdb.conf

日志轮转;

/etc/logrotate.d/influxdb

命令行客户端;

/usr/bin/influx

查看工具;

/usr/bin/influx_inspect

压力测试工具;

/usr/bin/influx_stress

数据库转换工具(将数据库从b1或bz1格式转换为tsm1格式);

/usr/bin/influx_tsm

服务端;

/usr/bin/influxd

Systemctl服务管理;

/usr/lib/influxdb/scripts/influxdb.service

/usr/lib/influxdb/scripts/init.sh

................

数据目录;

/var/lib/influxdb

日志目录;

/var/log/influxdb

|

3)开启Web

influxdb提供的简单web管理页面,可以用来操作influxdb,默认没有开启,如果想开启需要修改配置文件中[admin]部分,如下:

|

1

2

3

4

5

6

|

[admin]

Determines whether the admin service is enabled.

enabled = true

The default bind address used by the admin service.

bind-address = ":8083"

|

4)配置文件

[meta] – meta相关配置

dir:meta数据存放目录,默认值:/var/lib/influxdb/meta。

retention-autocreate:用于控制默认存储策略,数据库创建时,会自动生成autogen的存储策略,默认值:true。

logging-enabled:是否开启meta日志,默认值:true。

[data] – tsm1引擎配置

dir:最终数据(TSM文件)存储目录,默认值:/var/lib/influxdb/data。

wal-dir:预写日志存储目录,默认值:/var/lib/influxdb/wal。

query-log-enabled:是否开启tsm引擎查询日志,默认值:true。

cache-max-memory-size:用于限定shard最大值,大于该值时会拒绝写入,默认值:DefaultCacheMaxMemorySize = 1024 * 1024 * 1024 // 1GB。

cache-snapshot-memory-size:用于设置快照大小,大于该值时数据会刷新到tsm文件,默认值:DefaultCacheSnapshotMemorySize = 25 * 1024 * 1024 // 25MB。

cache-snapshot-write-cold-duration:tsm1引擎snapshot写盘延迟,默认值:DefaultCacheSnapshotWriteColdDuration = time.Duration(10 * time.Minute)。

compact-full-write-cold-duration:tsm文件在压缩前可以存储的最大时间,默认值:DefaultCompactFullWriteColdDuration = time.Duration(4 * time.Hour)。

max-series-per-database:限制数据库的级数,该值为0时取消限制,默认值:DefaultMaxSeriesPerDatabase = 1000000,measurement, tag set, retention policy相同的数据集合算做一个serie,级数算法示例如下:假设monitor1这个measurement有两个tags:id 和 name id 的数量为10,name的数量为 100,则 series 基数为 10 * 100 = 1000。

max-values-per-tag:一个tag最大的value数,0取消限制,默认值:DefaultMaxValuesPerTag = 100000。

trace-logging-enabled:是否开启trace日志,默认值:false。

[coordinator] – 查询管理的配置选项

write-timeout:写操作超时时间,默认值: 10s。

max-concurrent-queries:最大并发查询数,0无限制,默认值: 0。

query-timeout:查询操作超时时间,0无限制,默认值:0s。

log-queries-after:慢查询超时时间,0无限制,默认值:0s。

max-select-point = 0:SELECT语句可以处理的最大点数(points),0无限制,默认值:0。

max-select-series = 0:SELECT语句可以处理的最大级数(series),0无限制,默认值:0。

max-select-buckets = 0:SELECT语句可以处理的最大”GROUP BY time()”的时间周期,0无限制,默认值:0。

[retention] – 旧数据的保留策略

enabled:是否启用该模块,默认值 :true。

check-interval:检查时间间隔,默认值 :”30m0s”。

[shard-precreation] – 分区预创建

enabled:是否启用该模块,默认值 : true。

check-interval:检查时间间隔,默认值 :”10m0s”。

advance-period:预创建分区的最大提前时间,默认值 :”30m0s”。

[admin] – influxdb提供的简单web管理页面

enabled:是否启用该模块,默认值:false。

bind-address:绑定地址,默认值:”:8083″。

https-enabled:是否开启https ,默认值:false。

https-certificate:https证书路径,默认值:”/etc/ssl/influxdb.pem”。

[monitor] – 这一部分控制InfluxDB自有的监控系统。 默认情况下,InfluxDB把这些数据写入_internal数据库,如果这个库不存在则自动创建。 _internal 库默认的retention策略是7天,如果你想使用一个自己的retention策略,需要自己创建。

store-enabled:是否启用该模块,默认值 :true。

store-database:默认数据库:”_internal”。

store-interval:统计间隔,默认值:”10s”。

[subscriber] – 控制Kapacitor接受数据的配置

enabled:是否启用该模块,默认值 :true。

http-timeout:http超时时间,默认值:”30s”。

insecure-skip-verify:是否允许不安全的证书,当测试自己签发的证书时比较有用。默认值:false。

ca-certs:设置CA证书,无默认值。

write-concurrency:设置并发数目,默认值:40。

write-buffer-size:设置buffer大小,默认值:1000。

[http] – influxdb的http接口配置

enabled:是否启用该模块,默认值 :true。

bind-address:绑定地址,默认值:”:8086″。

auth-enabled:是否开启认证,默认值:false。

log-enabled:是否开启日志,默认值:true。

write-tracing:是否开启写操作日志,如果置成true,每一次写操作都会打日志,默认值:false。

pprof-enabled:是否开启pprof,默认值:true。

https-enabled:是否开启https,默认值:false。

https-certificate:设置https证书路径,默认值:”/etc/ssl/influxdb.pem”。

https-private-key:设置https私钥,无默认值。

max-row-limit:配置查询返回最大行数,默认值:10000。

max-connection-limit:配置最大连接数,0无限制,默认值:0。

shared-secret:用于JWT签名的共享密钥,无默认值。

realm:配置JWT realm,默认值: “InfluxDB”。

unix-socket-enabled:是否使用unix-socket,默认值:false。

bind-socket:unix-socket路径,默认值:”/var/run/influxdb.sock”。

[[graphite]] – graphite相关配置,具体参考:https://github.com/influxdata/influxdb/blob/master/services/graphite/README.md

enabled:是否启用该模块,默认值 :false。

bind-address:绑定地址,默认值:”:2003″。

database:数据库名称,默认值:”graphite”。

retention-policy:存储策略,无默认值。

protocol:协议,默认值:”tcp”。

batch-size:批量size,默认值:5000。

batch-pending:配置在内存中等待的batch数,默认值:10。

batch-timeout:超时时间,默认值:”1s”。

consistency-level:一致性级别,默认值:”one”。

separator:多个measurement间的连接符,默认值: “.”。

udp-read-buffer = 0:udp读取buffer的大小,0表示使用操作系统提供的值,如果超过操作系统的默认配置则会出错。 该配置的默认值:0。

[[collectd]] – collectd相关配置,具体参考:https://github.com/influxdata/influxdb/tree/master/services/collectd

enabled:是否启用该模块,默认值 :false。

bind-address:绑定地址,默认值: “:25826″。

database:数据库名称,默认值:”collectd”。

retention-policy = “”:存储策略,无默认值。

batch-size:默认值:5000。

batch-pending:默认值:10。

batch-timeout:默认值:”10s”。

read-buffer:udp读取buffer的大小,0表示使用操作系统提供的值,如果超过操作系统的默认配置则会出错。默认值:0。

typesdb:路径,默认值:”/usr/share/collectd/types.db”。

[[opentsdb]] – opentsdb配置

enabled:是否启用该模块,默认值:false。

bind-address:绑定地址,默认值:”:4242″。

database:默认数据库:”opentsdb”。

retention-policy:存储策略,无默认值。

consistency-level:一致性级别,默认值:”one”。

tls-enabled = false:是否开启tls,默认值:false。

certificate:证书路径,默认值:”/etc/ssl/influxdb.pem”。

batch-size:默认值:1000。

batch-pending:默认值:5。

batch-timeout:超时时间,默认值:”1s”。

log-point-errors:出错时是否记录日志,默认值:true。

[[udp]] – udp配置

enabled:是否启用该模块,默认值:false。

bind-address:绑定地址,默认值:”:8089″。

database:数据库名称,默认值:”udp”。

retention-policy:存储策略,无默认值。

batch-size:默认值:5000。

batch-pending:默认值:10。

read-buffer:udp读取buffer的大小,0表示使用操作系统提供的值,如果超过操作系统的默认配置则会出错。 该配置的默认值:0。

batch-timeout:超时时间,默认值:”1s”。

precision:时间精度,无默认值。

[continuous_queries]

log-enabled:是否开启日志,默认值:true。

enabled:是否开启CQs,默认值:true。

run-interval:时间间隔,默认值:”1s”。

五、InfluxDB基本操作

1)用户管理

可以直接在web管理页面做操作,也可以命令行。

|

1

2

3

4

5

6

7

8

9

10

11

|

显示用户;

show users

创建用户;

create user "username" with password 'password'

创建管理员权限用户;

create user "username" with password 'password' with all privileges

删除用户;

drop user "username"

|

3)数据库与表的操作

可以直接在web管理页面做操作,当然也可以命令行。

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

|

创建数据库;

create database "db_name"

显示所有的数据库;

show databases

删除数据库;

drop database "db_name"

使用数据库;

use db_name

显示该数据库中所有的表;

show measurements

创建表,直接在插入数据的时候指定表名(key-value);

insert disk,hostname=server02,device=/data free=90,used=110,used_percent=98.33,count=1

删除表;

drop measurement "measurement_name"

|

4)普通查询

那么话说,InfluxDB的查询语法是很给力的,很像SQL语句。下面一一介绍下,常用的InfluxDB里面常用的SQL语句。 话说InfluxDB给与的搜索条件还是很丰富的,有时间分析下他落地在leveldb的数据结构。

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

|

表名都可以正则;

select * from /.*/ limit 1

输出Json格式;

$ influx -database 'test' -execute 'select * from disk' -format 'json' -pretty

查询数据大于200的;

select * from disk where free > 80

查询数据里面含有下面字符串的;

select * from user_events where url_base = ‘friends#show’

约等于;

select line from log_lines where line =~ /paul@influx.com/

按照30m分钟进行聚合,时间范围是大于昨天的主机名是server1的;

select mean(value) from cpu_idle group by time(30m) where time > now() – 1d and hostName = 'server1'

select column_one from foo where time > now() – 1h limit 1000;

select reqtime, url from web9999.httpd where reqtime > 2.5;

select reqtime, url from web9999.httpd where time > now() – 1h limit 1000;

url搜索里面含有login的字眼,还以login开头;

select reqtime, url from web9999.httpd where url =~ /^/login//;

数据的merge;

select reqtime, url from web9999.httpd merge web0001.httpd;

|

下面再说下数据的汇聚,聚合啥的。

|

1

2

3

4

5

6

7

8

9

10

11

|

count();

SELECT COUNT(column_name) FROM series_name group by time(10m) …

min();

SELECT MIN(column_name) FROM series_name group by time(10m) …

MAX();

SELECT MAX(column_name) FROM series_name group by time(10m) …

mean();

SELECT MEAN(column_name) FROM series_name group by time(10m) …

|

5)连续查询(Continuous Queries)

InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含SELECT关键词和GROUP BY time()关键词。

InfluxDB会将查询结果放在指定的数据表中。目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

新建连续查询

|

1

2

3

4

5

|

CREATE CONTINUOUS QUERY <cq_name> ON <database_name>

[RESAMPLE [EVERY <interval>] [FOR <interval>]]

BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>

FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]

END

|

样例:

|

1

2

3

|

CREATE CONTINUOUS QUERY redis_30m ON test BEGIN

SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients),MIN(connected_clients)

INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END

|

在test库中新建了一个名为redis_30m的连续查询,每三十分钟取一个connected_clients字段的平均值、中位值、最大值、最小值redis_clients_30m表中。使用的数据保留策略都是default。

显示或删除所有已存在的连续查询

|

1

2

|

SHOW CONTINUOUS QUERIES

DROP CONTINUOUS QUERY <cq_name> ON <database_name>

|

6)数据保存策略(Retention Policies)

InfluxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

6.1 查看当前数据库Retention Policies

|

1

|

show retention policies on "db_name"

|

6.2 创建新的Retention Policies

|

1

|

create retention policy "rp_name" on "db_name" duration 3w replication 1 default

|

rp_name:策略名;

db_name:具体的数据库名;

3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);

replication 1:副本个数,一般为1就可以了;

default:设置为默认策略;

6.3 修改Retention Policies

|

1

|

alter retention policy "rp_name" on "db_name" duration 30d default

|

6.4 删除Retention Policies

|

1

|

drop retention policy "rp_name"

|

六、结合Grafana使用

1)安装配置Grafana

CentOS系列使用YUM安装

|

1

2

|

$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.2.0-1.x86_64.rpm

$ sudo yum localinstall grafana-4.2.0-1.x86_64.rpm

|

或者

|

1

2

|

$ yum install initscripts fontconfig

$ rpm -Uvh grafana-3.1.1-1470047149.x86_64.rpm

|

Systemd方式启动Grafana

|

1

2

3

|

$ systemctl daemon-reload

$ systemctl start grafana-server

$ systemctl status grafana-server

|

启动Granfa之后,进程名称为grafana-server。将会默认使用grafana用户和组运行Granfa进程。默认会开启HTTP的3000端口。启动服务之后直接直接在浏览器访问http://IP:3000就会出现如下界面,默认账号和用户名为admin/admin,在/etc/grafana/grafana.ini配置文件中可修改。

详细:Grafana安装配置介绍

2)InfluxDB添加用户

|

1

|

create user "admin" with password 'admin' with all privileges

|

3)InfluxDB插入数据

|

1

2

|

use test;

insert disk,hostname=server01,device=/data free=80,used=100,used_percent=98.33,count=1

|

4)Grafana添加IfluxDB为数据源

然后就可以开始画图了。

InfluxDB中的tags可以作为条件,如hostname或device,而field可以作为value。

七、Python操作InfluxDB

1)安装infludb驱动

|

1

2

|

$ yum install python-pip

$ pip install influxdb

|

2)基本操作

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

|

! /usr/bin/env python

-- coding:utf-8 --

from influxdb import InfluxDBClient

json_body = [

{

    "measurement": "disk",

    "tags": {

        "hostname": "server01",

        "device":"/data"

    },

    "fields": {

        "free": 89,

        "used": 100

    }

}

]

查看数据;

def showDBNames(client):

result = client.query('show measurements;')

print("Result: {0}".format(result))

初始化连接(指定要操作的数据库);

client = InfluxDBClient('localhost', 8086, 'root', '', 'test')

查看表;

showDBNames(client)

写入数据,同时创建表;

client.write_points(json_body)

查看表;

showDBNames(client)

删除表;

client.query("drop measurement students")

showDBNames(client)

|

InfluxDB中文文档:https://github.com/jasper-zhang/influxdb-document-cn

转自: http://www.ywnds.com/?p=10763#comments

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • influxdb 简介 Influxdb是一个开源的分布式时序、时间和指标数据库,使用go语言编写,无需外部依赖。...
    盗梦者_56f2阅读 3,000评论 0 8
  • InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而I...
    Boris0621阅读 3,097评论 0 8
  • InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而I...
    __七把刀__阅读 164,512评论 19 91
  • 最近这段时间在使用influxdb,抽空翻译了一下配置文件。有不足的地方请指正。因为简书默认markdown编辑器...
    wangrui927阅读 4,272评论 0 4
  • 法拉第是公元1791~公元1867)英国物理学家、化学家,也是著名的自学成才的科学家。生于萨里郡纽因顿一个...
    黄红兵阅读 791评论 0 1