开源存储详解-分布式存储与ceph
ceph体系结构
rados:reliable, autonomous, distributed object storage, rados
rados采用c++开发
对象存储
ceph严格意义讲只提供对象存储能力,ceph的块存储能力实际是基于对象存储库librados的rbd
对象存储特点
对象存储采用put/get/delete,不支持修改
对象存储结构是扁平结构,不支持多层容器嵌套结构
rados
rados集群主要由两种节点组成,osd和monitor。osd节点负责数据维护和存储,monitor节点负责检测和维护系统状态。osd和monitor节点之间相互传递节点状态信息,共同得出系统总体运行状态,并将其保存在一个全局数据结构中(集群运行图)
使用rados系统时,客户端向monitor索取最新集群运行图,然后直接在本地运算,得到存储的位置,便直接与osd通信,完成数据操作
osd,monitor,ceph客户端均可直接通信,意味osd也可以分担monitor等重要节点的部分业务,缓解节点压力
osd
osd可被抽象为系统进程和守护进程
osd节点实质是一个安装了os和fs的节点,同时还应当 保证osd拥有一定的计算能力,内存能力,网络带宽
osd的守护进程可完成osd的所有逻辑功能,包括monitor和其他osd的通信,维护系统及更新状态等
rados接收来自ceph客户端发送的数据,然后存储为对象,对象在节点是fs中的一个文件。对象存储中,是扁平结构,没有目录层次。文件只有文件id,对象内容的二进制格式和文件的元数据。文件元数据取决于客户端请求发送的一些信息,如文件创建者,创建日期,最后修改日期等
osd状态
osd状态直接影响数据重新分配
osd状态用两个维度表示:up或down(daemon和monitor连接是否正常)和in或out(osd是否有pg),两种状态叠加起来,osd总共有四种状态
up && in:osd正常工作状态
up && out:一般是osd刚启动,osd还没有pg
down && in:可能网络中断或daemon意外退出
down && out:osd无法恢复,
PG:Placement Group,用来映射osd节点和存储的对象
osd状态检测
ceph是基于通用计算机硬件构建的分布式系统,故障概率远高于专用硬件构建的分布式系统。如何检测节点故障和网络故障是ceph高可用的一个重点,ceph采用了心跳检测机制,但增加了监控维度
osd之间心跳包:如果osd之间都相互发送心跳,则时间复杂度是pow(n,2),ceph选择仅peerOSD之间发送心跳包,这样时间复杂度是pow(n,1)。peerOSD是osd存储对象和其PG副本所在的osd。ceph同时提供公共网络(osd和客户端通信)和集群网络(osd之间通信网络),peerOSD心跳包也可按网络进行分类。
osd和monitor之间心跳包:osd之间心跳检测结果通过osd和monitor心跳包传送
数据寻址
分布式系统有两个最基本的问题:数据放在哪,数据写在哪。ceph寻址过程如图
file:面向客户的文件对象
object:面向rados的文件对象。object和file的区别是,object单元最大大小存在上限(如2MB或4MB),大于单个object单元大小的file会被切分为一系列统一大小的object进行存储
PG:一个PG负责组织多个object,一个object只能被映射在一个PG,一个PG会被映射在n多个OSD中,实际工作中,n可能大于等于2
file->object映射
将file切分为object进行存储,每个object有唯一的oid,oid可分为两部分,分别是切分的object的元数据和object在切分列表里的序号,比如某个id为filename的文件被切分为序号为0,1,2的三个object,则三个object的oid分别为filename0 filename1 filename2
此处存在一个隐含问题,及文件的id(元数据)必须不重复,否则无法映射
object->PG映射
映射公式:hash(oid) && mask -> pgid
先对oid哈希,再和mask按位与。按rados设计,PG总数应为2的整数次幂,mask的值为PG总数-1所以此映射公式含义是从总数为m的PG中随机均匀地选取一个PG,这样的话,rados保证了object和pg尽量均匀的映射
PG->OSD映射
rados使用一个名为CRUSH的算法,输入pgid,输出n个osd id,n需配置为大于等于2。CRUSH算法和pgid的映射不同,它不是固定输出结果的,而是会受到其他因素影响:系统状态和存储策略配置。
系统状态:即集群运行图。其他osd状态变化时,可能导致集群运行图变化
存储策略配置:和安全有关,即管理员指定PG分配在OSD的规则,比如亲和规则
当系统状态和存储策略配置不变时,PG和OSD的映射才是固定不变的
使用CRUSH算法的原因,一个是算法结果收到配置osd亲和的影响,还有一个是CRUSH算法稳定性的特点,即系统中加入大量osd时,大部分PG和OSD之间的映射不会改变,只有少部分映射会发生改变,并引发数据迁移
小结
三个映射没有任何全局查表的操作,唯一的全局数据结构:集群运行图,其操作与维护是轻量级的,不会对系统造成太大影响
为什么在object和osd之间引入PG
如果没有PG,(1) 则osd损坏时,或新增osd时,原有的object和osd之间的映射无法被更新 (2)有PG时,osd间心跳检测是以PG为粒度,而PG数量在每个osd是基本固定的,当文件增多,PG不会增加。如果不用PG,则osd间心跳则以文件为粒度,当object变多,心跳花的时间也会变多
存储池
一个存储池包含若干PG
存储池创建命令
ceph osd pool create {POOL_NAME} {PG_NUM} [{PGP_NUM}] [REPLICATED] [CRUSH_RULESET_NAME]
ceph osd pool create {POOL_NAME} {PG_NUM} {PGP_NUM} erasure [erasure_code_profile] [crush_ruleset_name]
pgp数目通常和pg数目一致,增加pg数量通常不会发生迁移,增加pgp数量时用户数据才会发生迁移
PGP含义:
注意到,当PG增加时,原PG分为两半,所以新PG和原PG在同一个OSD上
monitor
客户端处理数据前必须通过monitor获取集群状态图。ceph也支持只有一个monitor节点
monitor不会主动查询osd状态,而是osd给monitor主动上报osd状态
集群运行图实际是多个map统称,如monitor map, osdmap, pg map, crush map, mds map等,各运行图维护各自的运行状态。CRUSH MAP用于定义如何选择OSD,CRUSH MAP是树形结构
default下是主机,主机下是主机自己的osd。CRUSH MAP中,所有非叶节点称为桶(Bucket),所有Bucket的ID都是负数,OSD ID是正数,这样可以区分OSD的ID。选择OSD时,需要先从一个指定的bucket开始,往树底下寻找,直到到达叶节点。目前有五种算法来实现子节点的寻找,包括Uniform,List,Tree,Straw,Straw2,不同算法性能如下
monitor与客户端通信
客户端包括rbd客户端,rados客户端,ceph fs客户端等。根据通信内容分为获取OSDMAP和命令行操作
命令行操作:主要由monitor执行或monitor转发到osd执行
获取OSDMAP:因为有了集群状态图,客户端可不经过monitor直接与osd通信,所以仅需要获取OSDMAP时,客户端才需要与monitor通信。再就是客户端初始化。再就是某些特殊情况会主动获取OSDMAP,如找不到PG(PG删除或创建),存储池等空间占满,或者OSDMAP设置了暂停所有读/写,每次读写都会获取OSDMAP
monitor与osd通信
相比monitor与客户端通信,monitor与osd通信更复杂
osd定期将其PG信息发给monitor。PG信息包含PG状态,Object信息等
osd操作命令通过monitor转发给osd
数据操作流程
ceph读写仅对object的主osd进行读写,保证了数据的强一致性。primary收到写请求后,负责把数据发给副本,只有副本都成功写,primary才接收object的写请求,保证了副本一致性,写入流程可参考下图
图中先经过前述章节的数据寻址找到对应的osd,然后客户端将数据发给primary osd,primary osd再给osd副本发送数据进行写请求,副本的写请求都完成并返回给primary时,primary再返回结果给客户端
cache tiering
分布式存储一个硬件组合是一般PC+一般机械硬盘。当需要优化系统的iops时,一个方法是新增快速的存储设备作为缓存,热数据在缓存中被访问到,缩短数据的访问延时。Ceph在FireFly0.80版本开始引入这种技术,称为Cache Tiering
Cache Tiering理论基础是数据访问是不均匀的,缓存那些访问频率最高的数据(热点数据),就可以提升读写响应时间
Cache Tiering的做法是,用比如固态硬盘等快速存储设备组成一个存储池作为缓存层,用相对慢速的机械硬盘等组成冷数据存储池。缓存层采用多副本模式
Cache Tiering中有个分层代理,当缓存层中数据不再活跃时,代理会把数据从缓存层移除,放入Storage层,这种操作称为Flush刷新或Evict逐出
Cache Tiering支持几种模式
写回模式 对于写操作,在缓存层写入完成后,直接返回客户端,再由缓存层的代理线程负责写回storage层。读操作可以看是否命中,若命中直接从缓存读,若未命中则可重定向到storage层访问,然后按一定规则判断是否将未命中的数据提升到缓存层
forward模式 所有请求都重定向到storage层
readonly模式 写请求直接重定向到storage层,读请求会使用缓存命中
readforward模式 读全部重定向到storage,写请求使用写回模式
readproxy模式 写采用写回模式,读请求使用缓存层作为代理,缓存层代理去storage读,再返回给客户端,缓存层不会存储读取数据到缓存层
块存储
ceph中的块设备称为image,是精简分配的,大小可调且可存储在多个osd中,且可对数据进行条带化
条带化:一块数据不支持多个进程同时访问,当多个进程访问时,就要排队,条带化是将连续的数据分片存储,减少访问进程的等待时间。条带化可将多个磁盘驱动器合并为一个卷,这个卷的速度比单个盘的速度快很多。ceph的块设备对应lvm的逻辑卷,块设备创建时,可指定某些参数进行条带化:stripe-unit-条带大小,stripe-count-在多少数量的对象之间进行条带化
使用块设备有两种方法:(1)将块设备交给内核,成为一个虚拟块设备,就像其他块设备一样,格式化然后可以挂载使用,名字一般为/dev/rbd0... (2) 通过librbd,librados进行管理,此种方法可工虚拟机进行使用
ceph fs
ceph fs是一个可移植操作系统接口兼容的分布式存储系统,与通常的nfs一样,访问fs时需要有对应的客户端。ceph fs支持两种客户端,ceph fs fuse和ceph fs kernel,也就是有两种使用ceph fs的方式,一个是通过kernel module,内核包含了ceph fs代码;一个是通过用户空间文件系统(FUSE)。Fuse的存在是因为某种情况无法升级kernel,将ceph和kernel分开弄,就互不影响
ceph fs底层除了osd monitor,还添加了元数据服务器(MDS),cephfs要求ceph存储集群至少有一个MDS,MDS只为cephfs服务,如果不需要cephfs,则不必使用MDS
MDS即能提高集群性能,也能降低集群负载。因为MDS以mds守护进程形式工作,当对文件对象进行ls,cd这些操作,如果让osd来处理会增加负载,如果将元数据相关操作和存储分离出来,可减少osd负载和请求次数
multi active MDS
目录长度
Luminous版本后,引入了multi active MDS。当目录越来越大,这个大目录的mds会成为性能瓶颈,multi active MDS采用了折中的目录划分方法,用户可以将不同的目录绑定到不同MDS,当某个目录长度增大时,超过mds_bal_split_size(默认10000),会对目录进行分割,一般情况下不会立即分割,因为可能影响到正常操作,而是会在mds_bal_fragment_interval秒后进行分割,如果目录长度超过mds_bal_fragment_fast_factor就会马上分割目录,分割产生的子目录数位2^mds_bal_split_bits
访问频率
mds为每个目录单独维护时间衰减计数器,用于对目录片段进行读写操作,当某个目录写或读操作,会导致计数器的计数增加,当写的计数或读的计数超过mds_bal_split_wr和mds_bal_split_rd时,会触发目录拆分
配额
可以以目录数目或大小的形式给用户设置配额,以xattr方式存放:ceph.quota_max_files, ceph.quota.max_bytes
虽然可配置配额,但有一些局限性: 1 配额检测需要一定的时间,会导致存在误差 2如果在可访问的目录的父目录设置配额,则该目录不会收到配额影响,只有在可访问目录下的子目录设置配额,才会受到配额影响
后端存储objectstore
对象存储在ceph完成了对象存储操作,封装了数据存储,并有api,实际存储调用api
objectstore有不同的方式,如filestore,bluestore,memstore,kstore等,可在配置文件中通过osd_objectstore字段指定objectstore的类型
filestore
bluestore
seastore
CRUSH算法
ceph可靠性
ceph中的缓存
ceph加密与压缩
qos
ceph性能测试与分析
ceph与openstack
相关文章:
开源存储详解-分布式存储与ceph
ceph体系结构 rados:reliable, autonomous, distributed object storage, rados rados采用c开发 对象存储 ceph严格意义讲只提供对象存储能力,ceph的块存储能力实际是基于对象存储库librados的rbd 对象存储特点 对象存储采用put/get/delete…...
Vue 快速入门:开启前端新征程
在当今的 Web 开发领域,Vue.js 作为一款极具人气的 JavaScript 前端框架,正被广泛应用于各类项目之中。它以简洁的语法、高效的数据绑定机制以及强大的组件化开发模式,为开发者们带来了前所未有的开发体验。如果你渴望踏入前端开发的精彩世界…...
GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线
文章目录 零、前言一、授权码登录体验优化:一步直达聊天界面二、全新“项目”功能:让工作更有条理三、语音功能升级:全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥,目标是带十万人玩转ChatGPT。 亲爱的用户&…...
常用的数据结构API概览
List ArrayList 1、在初始化一个ArrayList的时候,如果我想同时set一些值 比如存放int[ ] List<int[]> list new ArrayList(Arrays.asList(new int[]{intervals[0][0],intervals[0][1]}));//或者int[] temp new int[]{intervals[0][0],intervals[0][1]}…...
《探秘计算机视觉与深度学习:开启智能视觉新时代》
《探秘计算机视觉与深度学习:开启智能视觉新时代》 一、追溯起源:从萌芽到崭露头角二、核心技术:解锁智能视觉的密码(一)卷积神经网络(CNN):图像识别的利器(二࿰…...
Linux:操作系统不朽的传说
操作系统是计算机的灵魂,它掌控着计算机的硬件和软件资源,为用户和应用程序提供了一个稳定、高效、安全的运行环境。 在众多操作系统中,Linux 的地位举足轻重。它被广泛应用于服务器、云计算、物联网、嵌入式设备等领域。Linux 的成功离不开…...
Excel重新踩坑5:二级下拉列表制作;★数据透视表;
0、在excel中函数公式不仅可以写在单元格里面,还可以写在公式里面。 1、二级下拉列表制作: 2、数据透视表: 概念:通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览:在插入选项中有个数据透视表,数…...
containerd配置镜像加速(含新旧版本)
文章目录 镜像加速使用文档containerd配置说明文档host.toml配置步骤(containerd2.x新版功能,与config.toml解耦,无需重启containerd)传统配置(需要重启containerd) 镜像加速使用文档 关于镜像加速的使用可…...
国产编辑器EverEdit - 常用资源汇总
1 国产编辑器EverEdit-常用资源汇总 EverEdit是一款国产文本编辑器,历经超过15年的更新和维护,拥有不输业界顶级商业文本编辑器(EmEditor、UltraEdit)的实力,甚至在某些方面的功能更强(当然,各有千秋),开发者对文本编辑…...
应急指挥系统总体架构方案
引言 应急指挥系统总体架构方案旨在构建一个高效、智能的应急管理体系,以应对自然灾害、事故灾难等突发事件,保障人民生命财产安全。 背景与挑战 近年来,安全生产形势严峻,自然灾害事故频发,对应急指挥系统的要求越…...
Edge Scdn的应用场景有哪些?
酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…...
LeetCode:98.验证二叉搜索树
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 …...
mysql报错2059
客户端连接mysql服务时提示2059错误,通常与身份验证插件有关,具体表现为客户端无法加载指定的身份验证插件。这个错误在MySQL 8.0及更高版本中较为常见,因为从MySQL 8.0开始,默认的加密规则从mysql_native_password变为了caching_…...
2025/1/4期末复习 密码学 按老师指点大纲复习
我们都要坚信,道路越是曲折,前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 现代密码学 第五版 杨波 第一章 引言 1.1三大主动攻击 1.中断…...
【数据仓库金典面试题】—— 包含详细解答
大家好,我是摇光~,用大白话讲解所有你难懂的知识点 该篇面试题主要针对面试涉及到数据仓库的数据岗位。 以下都是经典的关于数据仓库的问题,希望对大家面试有用~ 1、什么是数据仓库?它与传统数据库有何区别? 数据仓库…...
deepFM模型pytorch实现
deepFM deepfm包含两个部分:因子分解机FM和神经网络DNN,分别负责低阶特征和高阶特征的提取。可以处理全是分类特征的数据,或者分类与数值型结合的数据。 FM部分是对一阶特征和二阶特征(一阶特征之间的交互)的处理。 …...
【Linux】传输层协议UDP
目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…...
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分 目录 MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分MOE划分不同专家的方法K-Means聚类算法来实现将神经元特征聚类划分成不同专家(行或者列聚类)举例说明怎么聚类,最后神经网络怎么保存M…...
Redis两种主要的持久化方式是什么?
Redis支持两种主要的持久化方式,它们分别是RDB(Redis Database Snapshotting)和AOF(Append Only File)。以下是这两种持久化方式的详细介绍: 一、RDB(Redis Database Snapshotting) …...
【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95)…...
机器学习基础-卷积的计算
1 掌握卷积计算的基本过程 1.1 单通道单卷积核 如图3所示,现在有一张形状为[5,5,1]的灰度图,我们需要用图3右边的卷积核对其进行卷积处理,同时再考虑到偏置的作用。计算过程如下: 1.2 单通道多卷积核 如下图所示,左…...
使用LINUX的dd命令制作自己的img镜像
为了避免重复安装同一镜像,配置环境,首先我准备一个正常使用的完整系统。 使用Gparted软件先将母盘(如U盘,TF卡)分区调整为只有数据的大小。如:60G的TF卡,只用了3.5G,将未使用的空间…...
pdf预览兼容问题- chrome浏览器105及一下预览不了
使用的"tato30/vue-pdf": "^1.11.2"预览插件,发现chrome浏览器105及一下预览不了 pdfPreview预览组件: <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...
SpringBoot中实现拦截器和过滤器
【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jak…...
基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划
• 关于前后端分离 当前流行的一种常见的前后端分离模式是vueflask,vueflask模式的前端和后端之间进行数据的传递通常是借助 API(应用程序编程接口)来完成的。vue通过调用后端提供的 API 来获取或提交数据。例如,前端可能通过发送…...
GitHub的简单操作
引言 今天开始就要开始做项目了,上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…...
LLM大语言模型自动化测试(ROUGE和RAGAS)及优化方案
1. 模型自动化测试 模型的测试中,不同类型的任务评测指标有显著差异,比如: 分类任务: 准确率(Accuracy):正确预测的比例。 精确度(Precision)、召回率(Recal…...
你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?
你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗? 一. JVM、JDK与JRE的关系二. JVM、JDK与JRE的作用2.1 什么是JVM?2.2 什么是JDK?2.3 什么是JRE? 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有…...
实际开发中,常见pdf|word|excel等文件的预览和下载
实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…...
Elasticsearch:Lucene 2024 年回顾
作者:来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中,我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色,发布了许多版本,包括三年来的首次重大更新,其中包含令人兴奋…...
springboot实战纪实-课程介绍
教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能,降低了复杂性,同时支持…...
什么是TDD测试驱动开发(Test Driven Development)?
什么是测试驱动开发? 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法:在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD?通过在实…...
学习随记:word2vec的distance程序源码注释、输入输出文件格式说明
word2vec中有5个程序,其中demo-word.sh中涉及两个:word2vec、distance。考虑到distance比较简单,所以我从这个入手,希望通过简单代码理解如何在一个高维数据空间计算距离(查找)。一维数据的查找,…...
CSS 之 position 定位属性详解
CSS系列文章目录 CSS 之 display 布局属性详解 CSS 之 position 定位属性详解一文搞懂flex布局 【弹性盒布局】 文章目录 CSS系列文章目录一、前言二、静态定位:position:static;二、相对定位:position:relative三、绝对定位:pos…...
初学STM32 --- USMART
目录 USMART简介 USMART主要特点: USMART原理 USMART组成: USMART 的实现流程简单概括 USMART扫描函数: USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件,可以大大提高代码调试效率! USMART主…...
MySQL叶子节点为啥使用双向链表?不使用单向呢?
文章内容收录到个人网站,方便阅读:http://hardyfish.top/ 文章内容收录到个人网站,方便阅读:http://hardyfish.top/ 文章内容收录到个人网站,方便阅读:http://hardyfish.top/ MySQL 中的 B 树索引&#x…...
4_TypeScript 条件语句 --[深入浅出 TypeScript 测试]
在 TypeScript 中,条件语句用于根据不同的条件执行不同的代码块。这些语句包括 if 语句、else if 语句、else 语句和 switch 语句。通过使用条件语句,你可以编写出能够根据特定逻辑分支的代码,从而实现更加动态和灵活的功能。 1. if 语句 i…...
vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。 1.设计思路:2.设计细节3.详细代码实现 1.设计思路: 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…...
图漾相机基础操作
1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件,可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据,还支持查看设备基础信息,在线修改gain、曝光等各种调节相机成像的参数功能…...
【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现
图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展,对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊,成为了图像缩放中的一个研究热点。 一、 二阶牛顿插…...
K210识别技术简介与基础使用方法
目录 一、K210芯片概述 二、K210的硬件配置与开发环境 1. 硬件配置 2. 开发环境 三、K210的识别技术基础 1. 图像识别 2. 语音识别 四、K210识别技术的基础使用方法 1. 图像识别基础使用 2. 语音识别基础使用 五、K210识别技术的应用场景 六、总结与展望 一、K210芯…...
【Android学习】Adapter中使用Context
参考文章 文章目录 1. 通过 Adapter 构造函数传入 Context2. 通过 Parent.context 获取3. 通过 onAttachedToRecyclerView() 方法获取4. 通过 ImageView 获取 context (局限于本例子中)5. 四种方法对比分析6. 作者推荐的方法 需求: Glide加载图片需要用到Context 1…...
LLM大模型RAG内容安全合规检查
1.了解内容安全合规涉及的范围 我们先回顾一下智能答疑机器人的问答流程。问答流程主要包括用户、智能答疑机器人、知识库、大语言模型这四个主体。 涉及内容安全的关键阶段主要有: 输入阶段:用户发起提问。 输出阶段:机器人返回回答。 知识…...
Flink operator实现自动扩缩容
官网文档位置: 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…...
数据挖掘——集成学习
数据挖掘——集成学习 集成学习Bagging:有放回采样随机森林 BoostingStacking 集成学习 集成学习(Ensemble learning)方法通过组合多种学习算法来获得比单独使用任何一种算法更好的预测性能。 动机是为了提高但分类器的性能 Bagging&…...
XGBoost 简介:高效机器学习算法的实用指南
1. 什么是 XGBoost? XGBoost,全称 eXtreme Gradient Boosting,是一种基于 梯度提升决策树(GBDT) 的高效实现。相比传统的 GBDT,XGBoost 在速度、内存利用和并行化等方面做了很多优化,因此在大规…...
【NLP高频面题 - Transformer篇】什么是缩放点积注意力,为什么要除以根号d?
什么是缩放点积注意力,为什么要除以根号d? 重要性:★★★ Transformer 自注意力机制也被称为缩放点积注意力机制,这是因为其计算过程是先求查询矩阵与键矩阵的点积,再用 d k \sqrt{d_k} dk 对结果进行缩放。这…...
HTML——56.表单发送
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单发送</title></head><body><!--注意:1.表单接收程序,放在服务器环境中(也就是这里的www文件目录中)2.表单发送地址&#x…...
C++26 函数契约(Contract)概览
文章目录 1. 什么是契约编程?契约编程的三大核心: 2. C26 契约编程的语法语法示例 3. 契约检查模式3.1. default 模式3.2. audit 模式3.3. axiom 模式检查模式的设置 4. 契约编程与传统 assert 的区别示例对比 5. 契约编程的应用场景6. 注意事项7. 示例: 带契约的矩形面积计算…...
【HTML】Day02
【HTML】Day02 1. 列表标签1.1 无序列表1.2 有序列表1.3 定义列表 2. 表格标签2.1 合并单元格 3. 表单标签3.1 input标签基本使用3.2 上传多个文件 4. 下拉菜单、文本域5. label标签6. 按钮button7. div与span、字符实体字符实体 1. 列表标签 作用:布局内容排列整齐…...