Influxdb的存储引擎
创建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的存储引擎的更多相关文章
- 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile
本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...
- [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取
时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取 http://hbasefly.com/2018/05/02/timeseries-database-7/ 2018年5月2日 ...
- [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入
时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/ 2018年3月27日 ...
- 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计.由于InfluxDB的集群版已在0.12版就不再开源,因此如无特殊说明,本文的介绍对象都是指 InfluxD ...
- Influxdb数据存储
环境: CentOS6.5_x64 InfluxDB版本:1.1.0 InfluxDB存储引擎看起来很像一个LSM Tree,它包含预写日志和类似存储在LSM Tree中的SSTables只读数据. ...
- 【转帖】LSM树 和 TSM存储引擎 简介
LSM树 和 TSM存储引擎 简介 2019-03-08 11:45:23 长烟慢慢 阅读数 461 收藏 更多 分类专栏: 时序数据库 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- Mysql存储引擎及选择方法
0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...
- Mysql存储引擎比较
Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...
随机推荐
- Wireshark系列(从入门到精通的10个干货)
Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进 ...
- jdk完全卸载(亲测jdk1.7.0_80在win7)
1.从控制面板里删除java程序 2.删除注册表:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ 3.删除C:\Windows\System32 和 C:\Windows\ ...
- jenkins详解(一)
还是以以下几个问题来学习这个软件: 1.jenkins是什么? 2.为什么要用jenkins? 3.怎么用jenkins? 1.jenkins是什么? Jenkins是一个开源的.提供友好操作界面的持 ...
- Java 自定义注解与注解解析实例
在学习Java之后会遇到很多的注解,有加载JavaBean的注解:@Component,@Service,@Controller:有获取配置文件中数值的注解@Value:有获取Http请求的数据的注解 ...
- java集合中的HashMap源码分析
1.hashMap中的成员分析 transient Node<K,V>[] table; //为hash桶的数量 /** * The number of key-value mapping ...
- FlowPortal-BPM——创建新组织架构、表单、流程
一.创建新组织架构 (1)管理流程→组织管理→组织架构添加需要的组织架构→新建新成员或角色 (2)设置成员信息 二.创建新数据源(如果在已有的数据库中操作,只需要添加需要的表) (1)添加新数据库并添 ...
- 使用hexo+coding搭建免费个人博客
1.检测node和npm 先检测一下有没有node.js和npm $ node -v //如果有,说明node.js安装成功! $ node -v v8.4.0 //如果有,说明npm安装成功! $n ...
- Https 客户端与服务器交互过程梳理
本文试图以通俗易通的方式介绍Https的工作原理,不纠结具体的术语,不考证严格的流程.我相信弄懂了原理之后,到了具体操作和实现的时候,方向就不会错,然后条条大路通罗马.阅读文本需要提前大致了解对称加密 ...
- switch case执行顺序
public class SwitchCase { public static void main(String[] args) { System.out.println(switchFun(4)); ...
- 一种很有意思的数据结构:Bitmap
昨晚遇到了一种很有意思的数据结构,Bitmap. Bitmap,准确来说是基于位的映射.其中每个元素均为布尔型(0 or 1),初始均为 false(0).位图可以动态地表示由一组无符号整数构成的集合 ...