智能存储解决方案:探索 TDengine 的多级存储功能
在当今数据驱动的时代,如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求,TDengine Enterprise 不仅支持使用对象存储(S3),还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本,还能显著提升数据写入性能,并简化系统维护流程。
多级存储的设计理念是将数据根据热度进行分级管理。热度较高的数据被存储在高速介质上,以便快速访问和处理;而时间久远、热度较低的数据则存放在低成本的存储介质上,从而实现经济性的最大化。这种策略的实施,不仅为企业节省了存储费用,更使得数据的写入和查询变得更加高效。
在江河信息水利物联感知服务平台的升级中,TDengine 多级存储功能就发挥了重要作用。借助这一功能,江河信息将原有的 10 多台 NVME 存储服务器精简为仅 3 台高效云盘与机械硬盘的服务器,这一转变不仅大幅节省了硬件成本开销,更有效降低了运维的工作量,提升了整体资源的利用效率。
本文将深入探讨 TDengine 的多级存储功能,介绍其配置方式、负载均衡策略以及如何实现高效的数据管理。通过对这一功能的全面解析,我们希望帮助更多用户充分利用 TDengine 的优势,优化数据存储策略,提升整体系统性能。
TDengine 多级存储好在哪?
降低存储成本是 TDengine 多级存储功能的一个显著优势。通过将数据按照热度进行分级存储,企业能够有效地将大量极冷数据存放在更为廉价的存储介质上。这一策略的实施,不仅显著减少了存储费用,还为企业提供了更高的经济效益。随着数据量的不断增加,传统的存储方式往往导致成本急剧上升,给企业的运营带来了压力。而多级存储的设计理念则在根本上解决了这一问题,让企业在实现数据存储的同时,可以灵活应对未来的各种挑战。
与此同时,提升写入性能也是 TDengine多级存储功能的一大亮点。每级存储支持多个挂载点,这意味着在进行数据写入时,可以实现更高的并发处理能力。得益于这一设计,WAL(预写日志)可以支持 0 级的多挂载点并行写入,从而极大地提升了写入性能。
在实际应用场景中,我们测得 TDengine 能够支持持续写入每秒超过 3 亿个测点,这对于数据密集型应用尤为重要,确保了系统能够高效处理实时数据。此外,TDengine 在机械硬盘上的表现也相当出色,磁盘 IO 吞吐量实测可达 2GB/s,这不仅为大规模数据的实时处理奠定了坚实的基础,也使得企业在面对海量数据时能够游刃有余。
除了成本和性能的提升,方便维护也是多级存储功能的一大优势。一旦各级存储的挂载点配置完成,后续的系统数据迁移等工作便无需人工干预。这种自动化的管理方式大大降低了运维人员的工作负担,提升了系统的可靠性。而且,存储扩容变得更加灵活和方便,企业可以根据实际需求随时调整存储策略,灵活应对业务变化。
最后,TDengine 的多级存储功能在 SQL 查询方面也展现出其透明性。无论用户查询的数据是否跨越不同的存储级别,一条 SQL 语句都可以轻松返回所有相关数据。这种设计不仅简化了用户的操作流程,还提高了查询的效率。用户无需关注数据存储的具体位置,只需专注于数据的分析和应用,真正实现了简单高效的数据管理。这种用户友好的设计理念,使得 TDengine 不仅适合技术专家,也能满足各种层次用户的需求。
多级存储的负载均衡与挂载点选择策略
在多级存储中,负载均衡是提升写入性能的关键因素。每个 dnode 仅有一个主挂载点,这一主挂载点负责存储系统中最重要的元数据,并且各个 vnode 的主目录也均位于该主挂载点上。这种设计虽然保证了数据的集中管理,但同时也限制了该 dnode 的写入性能,因为其 IO 吞吐能力受限于单个磁盘。
从 TDengine 3.1.0.0 版本开始,系统引入了对多个 0 级挂载点的支持。当一个 dnode 配置了多个 0 级挂载点时,所有 vnode 的主目录将被均衡分布到这些挂载点上,由此实现了写入负荷的共享。这一优化策略不仅提高了整体系统的写入能力,还使得系统在网络 I/O 和其他处理资源不成为瓶颈的情况下,能够实现线性增长的写入性能。测试结果表明,随着 0 级挂载点数量的增加,整个系统的写入能力也成倍提升,极大地增强了数据处理的效率。
除了负载均衡,多级存储还对同级挂载点的选择策略进行了优化。通常情况下,TDengine 会采用 round robin 策略从同级挂载点中选择一个用于生成新的数据文件。然而,在实际环境中,各磁盘的容量可能存在差异,或者虽然容量相同,但写入的数据量却不同,这会导致每个磁盘的可用空间不均衡,在实际进行选择时有可能会选择到一个剩余空间已经很小的磁盘。
为了解决这一问题,从 TDengine 3.1.1.0 版本开始,我们引入了新的配置项 minDiskFreeSize。当某个磁盘的可用空间小于等于该阈值时,该磁盘将不再被选中用于生成新的数据文件。该配置项的单位为字节,并建议其值大于 2GB(即会跳过可用空间小于 2GB 的挂载点)。这样的设计确保了在进行数据写入时,能够有效避免选择到已接近满载的磁盘,从而提升了存储的整体效率。
进一步地,从 3.3.2.0 版本开始,TDengine 引入了新的配置项 disable_create_new_file,用于控制某个挂载点上是否可以生成新文件。其缺省值为 false,即默认情况下,每个挂载点都可以生成新文件。这一策略为运维人员提供了更大的灵活性,使他们能够根据实际需求对挂载点进行管理,从而优化系统的存储性能。
通过这些负载均衡和挂载点选择策略的优化,TDengine 多级负载功能得到了显著提升,不仅提高了数据写入的效率,还确保了存储资源的合理利用,为用户在海量数据处理时提供了强有力的支持。
配置方式
TDengine 的多级存储功能支持最多 3 级,每级可配置多达 128 个挂载点。典型的配置方案包括:
-
0 级:配置多个挂载点,每个挂载点对应一块 SAS 硬盘;
-
1 级:配置多个挂载点,每个挂载点可以对应单块或多块 SATA 硬盘;
-
2 级:可配置为 S3 存储或其他廉价的网络存储。
在 TDengine 中,多级存储的配置方式如下(在配置文件 /etc/taos/taos.cfg
中):
dataDir [path] <level> <primary>
其中,各参数的含义如下:
-
path:挂载点的文件夹路径。
-
level:介质存储等级,取值为 0、1 或 2。
-
0 级用于存储最新的数据;
-
1 级用于存储次新的数据;
-
2 级用于存储最旧的数据。
-
-
如果省略该参数,默认为 0。各级存储之间的数据流向为:0 级存储 → 1 级存储 → 2 级存储。需要注意的是,同一存储等级可以挂载多个硬盘,而同一存储等级上的数据文件将分布在该存储等级的所有硬盘上。数据在不同级别存储介质之间的移动是由系统自动完成的,用户无需干预。
-
primary:标识是否为主挂载点,取值为 0(否)或 1(是)。如果省略该参数,默认为 1。在配置中,只允许存在一个主挂载点(即
level=0
,primary=1
)。以下是一个示例配置方式:
dataDir /mnt/data1 0 1
dataDir /mnt/data2 0 0
dataDir /mnt/data3 1 0
dataDir /mnt/data4 1 0
dataDir /mnt/data5 2 0
dataDir /mnt/data6 2 0
需要注意的是:
-
多级存储不允许跨级配置。合法的配置方案包括:仅 0 级;仅 0 级 + 1 级;以及 0 级 + 1 级 + 2 级。禁止只配置
level=0
和level=2
,而不配置level=1
。 -
禁止手动移除使用中的挂载盘,并且挂载盘目前不支持非本地的网络盘。
结语
综上所述,TDengine 的多级存储功能为企业提供了一种灵活、高效的数据管理解决方案。通过合理配置不同级别的存储介质,企业能够在降低存储成本的同时,提升数据写入性能和维护效率。此外,TDengine 还支持对象存储 S3,使得企业可以利用云存储的高可扩展性和低成本优势,进一步优化其数据存储策略。结合这两大特性,TDengine 不仅强化了其作为企业级数据库的竞争力,也为用户在应对海量数据挑战时提供了强有力的支持,帮助他们实现数字化转型的目标。
相关文章:
智能存储解决方案:探索 TDengine 的多级存储功能
在当今数据驱动的时代,如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求,TDengine Enterprise 不仅支持使用对象存储(S3),还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本&…...
Vue 3 中Pinia状态管理库的使用方法总结
Pinia 是 Vue 3 的状态管理库,旨在替代 Vuex,提供更简洁和更灵活的 API。以下是如何在 Vue 3 项目中使用 Pinia 的详细步骤。 1. 安装 Pinia 首先,你需要在你的 Vue 3 项目中安装 Pinia。你可以使用 npm 或 yarn 进行安装: npm…...

劫持微信聊天记录并分析还原 —— 访问数据库并查看聊天记录(五)
本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以 Python 语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们…...

vue3+vite 前端打包不缓存配置
最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了,原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…...

Dinky控制台:利用SSE技术实现实时日志监控与操作
1、前置知识 1.1 Dinky介绍 实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。 Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践。 致力于简化Flink任务开…...
cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_
编译正常,运行报错:cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_ 简单记录: 1、编译ffmpeg so库,编译正常; 2、AndroidStudio建立项目,引用so库,编译正常,运行…...
SwiftUI开发教程系列 - 第4章:数据与状态管理
在 SwiftUI 中,数据与视图的绑定可以自动响应数据变化,实时更新 UI。SwiftUI 提供了多种数据管理方式,包括 @State、@Binding、@ObservedObject 和 @EnvironmentObject 等属性包装器。本章将逐一介绍这些属性包装器的用途及其最佳实践。 4.1 使用 @State 进行本地状态管理 …...

API接口:助力汽车管理与安全应用
随着汽车行业的飞速发展,越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中,API接口起到了至关重要的作用。通过API接口,我们可以实现诸如车主身份验核、车辆信息查询等功能,从而为汽车智慧交通发展与安全应…...

聊一聊在字节跳动做项目质量改进的经验
引言 那一年,我刚毕业一年多,在第一家公司依然到了成长瓶颈期,一是不愿意频繁出差(做乙方的无奈);二是疲于每天重复的手工测试(团队缺乏技术氛围),技术上难有突破的机会…...

CSS基础概念:什么是 CSS ? CSS 的组成
什么是 CSS? CSS(层叠样式表,Cascading Style Sheets)是一种用于控制网页外观的样式表语言。通过定义样式规则,CSS 可以指定 HTML 页面中各个元素的显示方式,包括颜色、布局、字体、间距等。 与 HTML 专注…...
鸿蒙next版开发:ArkTS组件自定义事件分发详解
在HarmonyOS 5.0中,ArkTS提供了灵活的自定义事件分发机制,允许开发者对组件的事件进行细粒度的控制。自定义事件分发对于实现复杂的用户界面交互和提升用户体验至关重要。本文将详细解读如何在ArkTS中实现自定义事件分发,并提供示例代码进行说…...

计算机图形学论文 | 多边形中的点可见性快速算法
🦌🦌🦌读论文 🐨🐨摘要 针对点的可见性计算这一计算几何中的基础问题,提出一种支持任意查询点的可见多边形快速计算的基于多边形Voronoi图的点可见性算法。以与Voronoi骨架路径对应的Voronoi通道概念&…...
程序员输入问题
题目描述 程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“”,以表示“”与它之前的字符…...

雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 (VIP有限开放版本)
雨晨 23H2 Windows 11 企业版 IE VCDX 适度 22631.4445 (VIP有限开放版本) 文 件: 雨晨 23H2 Windows 11 企业版 适度 22631.4445 install.wim 提 取 码: ZZLR 大 小: 2824999564 字节 修改时间: 2024年11月9日, 星期六, 05:33:05 MD5 : 9C88…...

如何评估焊机测试负载均衡性能
评估焊机测试负载均衡性能的方法有很多,以下是一些建议: 1. 确定测试目标:首先,需要明确评估焊机测试负载均衡性能的目标。这可能包括提高生产效率、降低能耗、减少设备故障率等。明确目标有助于选择合适的评估方法和指标。 2. …...

【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)
文章目录 逐通道卷积(Pointwise Convolution,1x1 卷积)主要作用逐通道卷积的操作过程优势代码示例典型应用 膨胀卷积(Dilated Convolution)主要作用工作原理膨胀率 (dilation rate) 的定义代码实例膨胀卷积的优点 组卷…...
组合(DFS)
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输入:n 1, k 1…...

linux盘扩容缩容
这里写目录标题 文件格式介绍问题:当根盘满了过后怎么办?解决方式: Xfs文件格式缩容扩容1. 备份2. 卸载home3. 缩容home(home盘为xfs文件格式)4. 扩容 /5. 恢复home备份 Ext4文件格式缩容扩容1. 备份(可选&…...
mysql中REPLACE语句使用说明
在 MySQL 中,REPLACE语句用于插入或更新数据。当插入的数据与表中的唯一索引或主键冲突时,它会先删除冲突的行,然后再插入新的数据。这是一种很方便的操作方式,可以简化在需要更新或插入数据时的代码逻辑。 它的语法结构与INSERT语…...

分享:文本转换工具:PDF转图片,WORD转PDF,WORD转图片
前言 鉴于网上大多数在线转换工具要么需要收费,要么免费后但转换质量极差的情况,本人开发并提供了PDF转图片,WORD转PDF,WORD转图片等的文本转换工具。 地址 http://8.134.236.93/entry/login 账号 账号:STAR001&a…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...