创建Influxdb数据库时,我们可以看到下面选项,每个选项的含义就是本文要描述的:

Influxdb内部数据的存储可以使用不同的存储引擎。当前0.8.7版本支持的是LevelDB, RocksDB, HyperLevelDB, 和 LMDB。

这几个数据库都是kv类型的数据库,相关信息如下:

LevelDB 是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。
LevelDB 是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
此处随机读是完全命中内存的速度,如果是不命中 速度大大下降
LevelDB 只是一个 C/C++ 编程语言的库, 不包含网络服务封装, 所以无法像一般意义的存储服务器(如 MySQL)那样, 用客户端来连接它. LevelDB 自己也声明, 使用者应该封装自己的网络服务器.

RocksDB 是一个来自 facebook 的可嵌入式的支持持久化的 key-value 存储系统,也可作为 C/S 模式下的存储数据库,但主要目的还是嵌入式。RocksDB 基于 LevelDB 构建。

HyperLevelDB 是 HyperDex 开发的一个数据存储引擎,改进自 Google 的 LevelDB 以满足 HyperDex 的业务需要。
HyperLevelDB 主要在 LevelDB 上改进了:
1. 改进并行机制,使用更细粒度的内部锁控制来提供多 writer 线程的高吞吐量
2. 改进数据压缩

LMDB 是一个快而小的 key-value 数据存储服务,是由 OpenLDAP 项目的 Symas 开发的。使用内存映射文件,因此读取的性能跟内存数据库一样。其大小受限于虚拟地址空间的大小。

Influxdb 官方试验了这三个引擎,发现RocksDB性能好,所以Influxdb的默认存储引擎是RocksDB。

 

Influxdb 的数据存储可以支持多碎片存储,每个碎片可以是一种存储引擎,如下图,一个数据库可以有多个碎片。

 

每个碎片存储都有下面属性,跟上面图的内容项对应:

{
"name": "high_precision",
"database": "pauls_db",
"retentionPolicy": "7d",
"shardDuration": "1d",
"regex": "/^[a-z].*/",
"replicationFactor": 1,
"split": 1
}

在配置参数中, 我们可以看到 "database": "pauls_db" 标示 每个碎片存储都只能属于一个特定的数据库,一个数据库可以有多个 Shard Space。

"retentionPolicy": "7d" 表示数据被保存的时间(最少保存时间), 图中的 Retention 就是这个, 下图是系统界面中,对这个时间的设置, inf 标示永久。

 

"shardDuration": "1d",    表示 多长时间做次清理。

shardDuration 的值应该小于 retentionPolicy, 大于我们查询时的group by time() 的值。

上面配置的例子中 "retentionPolicy": "7d", "shardDuration": "1d",   会导致我们保存 7-8 天的数据, 每天都会清理,把7天前的数据清理掉一次。

"replicationFactor": 1,  每个存储碎片保存到几台服务器的设置;
"split": 1 给定的时间间隔内,有多少个存储碎片。
注意,这里有下面一个隐含的关系: replicationFactor * split == 服务器的数量。
数据被分配到那个碎片空间是基于下面的算法:
  • Look up the shard spaces for the InfluxDB database
  • Loop through the spaces and use the first one that matches the series name
  • Lookup the shards for the given time interval
  • If no shards exist, create N shards for the interval based on split
  • Assign the data to a given shard in the interval using the algorithm  hash(series_name) % N

使用 shard spaces 的最佳实践是把高精度,大数据的数据 每个时间段写一个 shard spaces 。在使用时把他们再合成一起。

 

参考资料:

Influxdb Storage Engines

http://influxdb.com/docs/v0.8/advanced_topics/sharding_and_storage.html

Influxdb的存储引擎的更多相关文章

  1. 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile

    本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...

  2. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取 http://hbasefly.com/2018/05/02/timeseries-database-7/  2018年5月2日   ...

  3. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/  2018年3月27日  ...

  4. 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析

    InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计.由于InfluxDB的集群版已在0.12版就不再开源,因此如无特殊说明,本文的介绍对象都是指 InfluxD ...

  5. Influxdb数据存储

    环境: CentOS6.5_x64 InfluxDB版本:1.1.0 InfluxDB存储引擎看起来很像一个LSM Tree,它包含预写日志和类似存储在LSM Tree中的SSTables只读数据. ...

  6. 【转帖】LSM树 和 TSM存储引擎 简介

    LSM树 和 TSM存储引擎 简介 2019-03-08 11:45:23 长烟慢慢 阅读数 461  收藏 更多 分类专栏: 时序数据库   版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...

  7. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  8. Mysql存储引擎及选择方法

    0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...

  9. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

随机推荐

  1. Apache环境修改.htaccess文件实现子目录强制HTTPS访问

    如果要在Apache环境下实现子目录强制HTTPS地址访问,该怎么实现呢?在此文章中将与大家一起分享如何在Apache环境下修改.htaccess文件来实现子目录强制HTTPS地址访问. 1.根目录域 ...

  2. fd与FILE结构体

    文件描述符 fd 概念:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表.当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件 ...

  3. 网络基础 02_TCP/IP模型

    1 TCP/IP参考模型概述   2 应用层 3 传输层 3.1 传输控制协议(TCP) 面向连接 可靠传输 流控及窗口机制 使用TCP的应用: Web浏览器:电子邮件: 文件传输程序 3.2 用户数 ...

  4. #Go# 常用类型转换

    #string 2 int int, err := strconv.Atoi(string) #string 2 int64 int64, err := strconv.ParseInt(string ...

  5. .NET中的async和await关键字使用及Task异步调用实例

    其实早在.NET 4.5的时候M$就在.NET中引入了async和await关键字(VB为Async和Await)来简化异步调用的编程模式.我也早就体验过了,现在写一篇日志来记录一下顺便凑日志数量(以 ...

  6. 【Three.js】模型抗锯齿处理

    1.锯齿消除方法 three.js参考使用官方demo发现模型渲染有锯齿,这种情况在旋转视角时候就非常明显. 抗锯齿的方法,很简单,只需要配置render两个属性即可: renderer = new ...

  7. Spring Boot中自动执行sql脚本

    说明:所有的代码基于SpringBoot 2.0.3版本 背景 在应用程序启动后,可以自动执行建库.建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工 ...

  8. Mac下快速新建txt文件

    1.打开终端,定位到桌面 cd desktop 2.输入 vi test.txt 此时,一个txt文件就会建立在桌面上,操作vi时的提示:按[i]为输入内容,编辑好之后按[esc]键,然后输入[:wq ...

  9. mono for android之文件系统与应用程序首选项(转)

    Aside from persistent files, your application might need to store cache data in a file. To do that, ...

  10. 19.Class的基本语法

    1.简介 JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Point(x, y) { this.x = x; this.y = y; } Point.proto ...