【linux】海量小文件的存储方案
在介绍海量文件存储之前,需要先介绍一下常见的系统里面文件是如何存储的
文件inode
在linux下,每个文件或者目录,都会分配一个inode(index node),它不存储具体的文件内容,而是记录该文件的基础信息。每个inode大小一半是100-200kb(画重点,下面会用)。inode下会记录:
- 文件大小、类型;
- 权限信息,比如所属组,用户,访问控制;
- 文件的操作时间;
- 具体数据在磁盘的位置;
文件系统初始化的时候,磁盘空间一般都会分俩部分。一部分就是存储inode,一部分是真正的存储文件内容。需要注意的系统的inode数量是有上限的,即系统最多可以存储多少个文件。有可能磁盘空间还有很多,但inode已经被用完;那此时系统无法再分配新的inode,你也依旧无法再存储新的文件。查看文件占用多少inode,和系统还有多少inode可以用如下俩个命令:
#某一文件inode占用
[root@why /]# stat my_file
File: my_file
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: xx Inode: 17 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-03-26 11:30:27
Modify: 2024-03-26 11:30:27
Change: 2024-03-26 11:30:27#系统inode使用个数情况,注意是个数。
[root@why /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 203330 100 203230 1% /dev/shm
tmpfs 203330 100 203230 1% /run
tmpfs 203330 200 203130 1% /sys/fs/cgroup#当使用率100%,那系统则无法再新曾文件。
#
海量文件存储
海量文件的元数据管理
海量文件存储就是数亿数十亿上百亿的文件存储,在如今互联网上,海量文件基本是个常态。图片、视频、商品等,很容易达到这个量级。在这个量级下,当前单机系统存储,是肯定存不下的。比如一个100亿的文件,先不考虑inode数量,光inode的存储大概就得1个TB,再加上具体的文件内容,很容易就超出单机系统了。这是海量文件要解的第一个问题,就是海量文件的元数据管理。
海量文件下如何高速支撑文件读取
假如存储支撑了这么多的元数据,比如单独搞到机器存储元数据,1TB其实压力还是可以的;或者多找几台机器分布式存储机器。此时会引入第二个问题,海量的文件下如何快速访问文件。对于一次文件读取是要先加载inode,找到真实文件存储位置再去读具体文件。一般系统为了加速文件访问,会把inode缓存在系统里(vfscache:https://www.science.unitn.it/~fiorella/guidelinux/tlk/node110.html)。如果这么大量的inode,很难缓存住的,海量文件下如何高速支撑文件读取。
ceph存储系统
对于海量文件业务场景,当前行业一般都会采用对象存储组件。比如腾讯云的cos,其他云厂商的对象存储,还有开源的ceph。
对于ceph来说,常见的块存储,文件存储和对象存储三种业务场景,都可以很好的支持。
整体架构
直接搬运自官方

- 客户端:ceph自己的客户端。
- 监视器:Ceph监视器(Ceph-mon)维护集群状态的映射,包括监视器自身,下边提到的管理器、OSD、MDS和CRUSH。为了容灾设计,通常至少需要三个监视器。
- 管理器:Ceph Manager守护进程(Ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。
- Ceph OSD:对象存储守护程序(Ceph OSD,cosd)存储数据,处理数据复制、恢复、再平衡,并通过检查其他Ceph OSD守护程序的心跳来向Ceph监视器和管理器提供一些监控信息。通常至少需要三个Ceph OSD来实现高可用。
- MDSs:Ceph元数据服务器(MDS,Ceph-MDS)存储Ceph文件系统的元数据。Ceph元数据服务器允许CephFS用户运行基本命令(如ls、find等),而不会给Ceph存储集群带来负担。
继续补充中…
相关文章:
【linux】海量小文件的存储方案
在介绍海量文件存储之前,需要先介绍一下常见的系统里面文件是如何存储的 文件inode 在linux下,每个文件或者目录,都会分配一个inode(index node),它不存储具体的文件内容,而是记录该文件的基础信息。每个inode大小一…...
【SpringBoot整合系列】SpringBoot整合RabbitMQ-基本使用
目录 SpringtBoot整合RabbitMQ1.依赖2.配置RabbitMQ的7种模式1.简单模式(Hello World)应用场景代码示例 2.工作队列模式(Work queues)应用场景代码示例手动 ack代码示例 3.订阅模式(Publish/Subscribe)应用…...
MySQL————创建存储过程函数
存储过程使用大纲 有参数传递 delimiter $$ 声明一个名称为get_student_introduce create procedure add_student_infor( in p_userName VARCHAR(20),in p_phone VARCHAR(11),in p_sex char(2),in p_introduce VARCHAR(255)) 开始操作 BEGIN 撰写真正在操作DMLDQL都行 INSE…...
数据赋能(86)——数据要素:管理核心框架
数据管理的核心框架是一个综合性的体系,旨在确保数据的有效利用、安全性以及合规性。这个框架主要包含了以下几个关键组成部分: 数据治理策略与目标:明确数据管理的整体战略和目标,包括数据价值的释放、数据资产地位的确定、多元…...
测试的基本概念
什么是软件测试 软件测试它就是一个过程测试就是对软件的全方位进行全面的校验.通过测试技术验证软件是不是符合用户的信息. 测试和开发的区别 在工作上的区别: 开发人员通过编程技能来开发和实现这个软件. 测试人员通过测试技能来验证软件是否符合用户需求. 在技术上的要求…...
Python多线程加速-休眠部分线程
总所周知Python由于GIL的问题,使用多线程时同一时刻只有一个线程在工作。故Python会在所有线程之间不断的切换,每切换到一个线程会执行一段字节码指令然后切换到另一个线程。如果开启了很多线程,且只有小部分线程在工作,如果不休眠…...
B+树(B+ Tree)
B树(B Tree)是一种对B树(B-Tree)的改进版本,它在数据库系统和文件系统中作为索引结构得到了广泛的应用,特别是在磁盘存储的场景下。B树保留了B树的基本特征,如自平衡、多路分支等,但…...
【Linux】了解信号产生的五种方式
文章目录 正文前的知识准备kill 命令查看信号man手册查看信号信号的处理方法 认识信号产生的5种方式1. 工具2. 键盘3. 系统调用kill 向任意进程发送任意信号raise 给调用方发送任意信号abort 给调用方发送SIGABRT信号 4. 软件条件5. 异常 正文前的知识准备 kill 命令查看信号 …...
【nuxt3国际化i18n】vue3+nuxt3+vite+TS国际化的正确做法
1、创建nuxt3请看Nuxt3官网 2、下面是添加i18n的叫教程,适用于企业前端项目。 添加依赖 依赖 yarn add vue-i18n yarn add nuxtjs/i18nnext -D配置文件nuxt.config.ts //nuxt.config.ts export default defineNuxtConfig({modules: [nuxtjs/i18n,],i18n: {stra…...
数据库管理-第185期 23ai:一套关系型数据干掉多套JSON存储(20240508)
数据库管理185期 2024-05-08 数据库管理-第185期 23ai:一套关系型数据干掉多套JSON存储(20240508)1 上期示例说明2 两个参数2.1 NEST/UNNEST2.2 CHECK/NOCHECK 3 一数多用3.1 以用户维度输出订单信息3.2 以产品维度3.3 以产品种类维度 4 美化输出总结 数…...
7 zip 介绍
7-Zip是一款广受好评的开源文件存档与压缩工具,支持高比率的压缩,适用于Windows、Linux和macOS等多种操作系统平台。以下是关于7-Zip的详细介绍: - **高压缩比**:7-Zip最显著的特点是其提供的高压缩率,尤其是使用其独…...
前端页面 贴边拖拽 盒子
vue 悬浮球(带自动吸附功能)_vue悬浮球-CSDN博客...
【408真题】2009-10
“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…...
WebSocket概述
TCP和HTTP规范有连接超时一说,所以长轮询并不能一直持续,服务端和客户端的连接需要定期的连接和关闭再连接。 WebSocket在请求头中有一个Connection:Upgrade字段,表示客户端想对协议进行升级,还有一个Upgrade:websocket字段&…...
人机协同是虚拟与真实的协同
“人机协同”是指人类与机器之间的合作与协同工作。在这种协同中,机器可以作为助手、辅助或扩展人类的能力,帮助人们完成任务,提高工作效率和质量。 虚拟与真实的协同是指在人机协同的过程中,虚拟想象世界和真实世界之间的协同。通…...
【编程向导】Docker-常用命令
常用命令 管理命令 管理命令说明builder管理构建config管理配置container管理容器context管理上下文engine管理引擎image管理镜像network管理网络node管理 Swarm 节点plugin管理插件secret管理 Docker secretsservice管理服务stack管理 Docker stacksswarm管理 Swarm 集群sys…...
LeetCode题练习与总结:不同的二叉搜索树Ⅱ--95
一、题目描述 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1: 输入:n 3 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,nul…...
idea SpringBoot + Gradle 环境配置到项目打包
一、前言 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持…...
深入理解tengine的sysguard模块
目录 1. 引言2. 开启sysguard模块2.1 编译2.2 配置3. 源码分析3.1 配置参数分析3.2 模块的初始化3.3 ngx_http_sysguard_handler函数3.4 各项负载指标的获取3.4.1 load系统负载的获取3.4.2 cpu使用率的获取3.4.3 内存使用情况的获取3.3.5 请求平均响应时间的获取1. 引言 Tengin…...
探索多模态LLM作为驾驶的世界模型
24年5月MIT的论文“Probing Multimodal LLMs as World Models for Driving”。 主要对多模态大语言模型(MLLM)在自动驾驶领域的应用进行了审视,并挑战/验证了一些常见的假设,重点关注它们通过图像/帧序列推理和解释在闭环控制环境…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
