存储

B树、B-树、B+树、B树都是什么

≡放荡痞女 提交于 2021-01-10 07:27:24
B 树、 B- 树、 B+ 树、 B* 树都是什么 B 树 即二叉搜索树: 1. 所有非叶子结点至多拥有两个儿子( Left 和 Right ); 2. 所有结点存储一个关键字; 3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B 树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果 B 树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么 B 树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变 B 树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销; 如: 但 B 树在经过多次插入与删除后,有可能导致不同的结构: 右边也是一个 B 树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用 B 树还要考虑尽可能让 B 树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题; 实际使用的 B 树都是在原 B 树的基础上加上平衡算法,即“平衡二叉树”;如何保持 B 树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在 B 树中插入和删除结点的策略; B- 树 是一种多路搜索树(并不是二叉的):

Kubernetes volumes简介

こ雲淡風輕ζ 提交于 2020-10-29 11:25:54
Kubernetes volumes简介   容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题。一、容器crash后,kubelet会重启该容器,但这些文件会丢失掉。二、pod中的多个容器经常需要共享文件。因此,Kubernetes的Volume应然而生,用于解决这些问题。 背景   在Docker中,也有 volumes 这个概念,volume只是磁盘上一个简单的目录,或者其他容器中的volume。生命周期也不受管理,并且直到最近他们都是基于本地后端存储的。Docker现在也提供了volume driver,但是现在来说功能也较弱(比如官网提到的Ceph volume driver,现在已经没有维护了)。   Kubernetes的volume,有着明显的生命周期——和使用它的pod生命周期一致。因此,volume生命周期就比运行在pod中的容器要长久,即使容器重启,volume上的数据依然保存着。当然,pod不再存在时,volume也就消失了。更重要的是,Kubernetes支持多种类型的volume,并且pod可以同时使用多种类型的volume。   内部实现中,volume只是一个目录,目录中可能有一些数据,pod的容器可以访问这些数据。这个目录是如何产生的,它后端基于什么存储介质,其中的数据内容是什么,这些都由使用的特定volume类型来决定。

图片处理能力提升50%,杉岩智能存储是如何做到的?

狂风中的少年 提交于 2020-03-25 23:17:03
一提到对象存储,大家多半会联想到“存储海量文件”。但随着近几年大数据、云计算等应用场景的广泛部署,客户对业务的敏捷性要求越来越高,尽可能地精简业务处理流程、提高业务处理效率变得更加重要。面对这些需求变化,身处幕后的存储设备已经不能仅仅局限于“存储”这个基本要求。一些领先的对象存储厂商已经开始思考,如何将原本外置的业务处理能力集成到存储上来,让存储做“更多事情”,结合业务需求来赋能应用,帮助客户实现更大价值。 为了满足部分客户在海量图片处理场景下对业务敏捷性和处理效率的要求,SandStone MOS在V5.4版本中新增图片处理功能,使图片处理的全业务流程均在对象存储内部完成,让流程处理从“繁琐低效”走向“简洁高效”。本文即对该特性进行专题解读。 一、图片处理业务导致海量数据高吞吐 随着各类企业文档、图片和音视频等非结构化文件的数量逐步从千万级快速增长至数亿级别,并呈现持续的指数级爆炸式增长,分布式对象存储已逐步替代传统NAS存储,成为当今企业内非结构化数据存储的标配。非结构化数据(尤其是图片文件),通常与企业的业务流程紧密相关。比如银行的购房贷款审批业务,购房者提交的申请材料通常包含身份证、户口本、个人收入证明及购房合同等各类文件的扫描件,并以图片的形式长期存档。整个审批流程包含了对图片的各种处理需求,比如通过缩略图来提高浏览效率、通过打水印以便于追溯图片来源

Dynamo和Bigtable对比

ε祈祈猫儿з 提交于 2020-03-25 15:30:36
数据结构化问题 首先要提到的是两者存储数据属性上的区别,虽然两者都是以key/value形式进行存储,但Dynamo偏向存储原数据,因为其所存储的数据是非结构化数据,对value的解析完全是用户程序的事情,Dynamo系统不识别任何结构数据,都统一按照binary数据对待;而Bigtable存储的是结构化或半结构化数据(web数据特点就是介于结构化和非结构化之间,因此称为半结构化数据。我这里不展开说它了,不了解半结构化数据的赶紧去google一下吧!),其value是有结构的数据——就如关系数据库中的列一般,因而可支持一定程度的Query(比如可按单列进行)。这点上看Bigtable更接近数据库(接近而不是等价!至于和关系数据库的具体区别可去google 一下,网上论述可不少!);另外, Bigtable所存储的数据都是以字符串格式实现,所以对主建或者列(以及其自动加上的时间戳)排序都是以字符序进行,而dynamo的键值并非以字符串存储,而是统一经过md5算法转后成16字节md5_key存储的,因此对数据的访问必须知道key才可进行,故而对扫表(用游标)或者query访问则无能为力。当然在dynamo的基础上,配合一些方式我们实现query也并不可能,一些具体方式我们后面慢慢探讨! 控制与存储架构比较 Dynamo是采用DHT(分布哈希表,请参看有关资料吧)作为基本存储架构和理念

Proxmox 使用nfs备份及存储iso

非 Y 不嫁゛ 提交于 2020-03-18 13:42:43
作者:田逸(sery@163.com) 使用nfs的目的 Proxmox集群中,如果将ISO文件存储于本地,只能供本节点存取,要用于集群的其它节点进行安装,将无法如愿。 现已经在物理节点pve48的本地存储上传了可以使用的ISO镜像,接下来,试着创建虚拟机,用此ISO镜像来安装虚拟机操作系统。 此虚拟机创建在集群中另外一个物理节点pve50上,随便给其命名进行测试。 这样有些麻烦,如果要在每个节点给虚拟机安装操作系统,按常规的方式,每个物理节点,都得上传好所需的操作系统ISO镜像,既费时又浪费宝贵的存储资源。 那么,有没有好的解决方案呢?有的,nfs就是很好的工具。外挂nfs服务,即解决了容量扩展问题,又能让所有的虚拟机都可以共享读取。可能会有人质疑,这nfs可用性差,而超融合可行性确实极高,何必多此一举呢? 我们用nfs来存储ISO镜像以及定时备份虚拟机,并不需要很高的可用性。因此,作为超融合高可用私有云的辅助手段,是非常经济和适用的。因为独立的物理nfs作为私有云集群的补充,并不需要较高的配置,只要磁盘容量足够大就行(不像集群计算节点,需要性能极佳的磁盘)。 挂接NFS服务 Proxmox web管理界面,在“数据中心”之下,选中“存储”,点击“添加按钮”。 只要nfs服务器权限设置正常,在管理界面输入nfs服务器的ip地址之后,可自动探测到设定的共享目录(实际是调用系统指令

C语言关键---sizeof

[亡魂溺海] 提交于 2020-03-01 16:33:40
sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。  二、sizeof的使用方法   1、用于数据类型    sizeof使用形式:sizeof(type)    数据类型必须用括号括住。如sizeof(int)。    2、用于变量    sizeof使用形式:sizeof(var_name)或sizeof var_name    变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。    注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。    如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。  三、sizeof的结果   sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型

微软工程师建议的11条数据库设计准则

主宰稳场 提交于 2020-02-29 05:41:11
从MOsky的博客中阅读本文 简介 作者:Shivprasad koirala 前微软ASP/ASP.NET的MVC工程师,现在印度当CEO。如果你认为本文有些地方翻 译不准确,可以去 译译网对应的贴子 参与本贴的翻译。 引言 在你开始读这篇文章之前,我可要事先声明,我可不是什么数据库设计方面的大师什么的。这11条设计准则,都是我从实际项目中,从经验中,从阅读和学习之中总结而来的。我个人认为,如我来设计数据库,遵循这11条准则,会让我受益良多。请多指教。 我之所以要写这么一篇详尽的文章,那是因为,我发现很多developer对“三范式”笃信不疑,而不顾自己的实际情况如何。他们认为,“三范式”就是数据库设计的唯一选项!随着项目进度不断推进,这些抱着这种观点的人,终归会碰壁的。 如果你对于“范式”没什么印象,可以点击 这里 。这篇视频教程手把手地教你“三范式”是怎么一回事。 译者注: 视频教程贴在youtube,如果不翻墙可能看不到。如果不想翻墙,或者不想听英语,可以谷歌“数据库范式”。 说到底,“范式”是非常重要的准则,但是,奉为圭臬,则总归要吃亏。因此,我将列出我所认为数据库设计最重要的11条准则。 准则一:应用的类型是什么?是OLTP还是OLAP? 当你开始设计数据库的时候,第一件事,就是分析,你设计的数据库,是为那种类型的数据库提供服务的。具体来说,到底是 事务型

实施虚拟化存储的五大理由

匆匆过客 提交于 2020-02-28 14:37:24
一、支持服务器虚拟化和高可用 存储虚拟化提供的共享存储,让虚拟机之间做迁移和负载均衡时不需要在存储系统之间迁移,同时也简化了动态虚拟化环境下存储资源的优化。共享存储池支持虚拟机集群技术以实现虚拟机的高可用,也就是在检测到错误时自动切换并能快速重启虚拟机。同样的,共享存储池也支持物理服务器上关键应用程序的高可用,也就是手动切换存储系统并能支持应用程序的集群技术。 二、简化管理 从管理的角度来看,与管理服务器直连存储相比,一个大的共享存储意味着更少的管理工作。当需要扩展现有存储或者在存储系统之间迁移数据的时候,存储虚拟化能够提供无干扰的存储空间扩容。越大的磁盘阵列越发拥有更好的管理工具,从而能更简化给服务器分配存储这类日常工作,减少管理员的工作量。 三、存储资源整合和分级存储 尤其是在NAS设备上,存储虚拟化可以被用来整合存储和对存储资源进行重复利用。举个例子,越来越多的对性能要求很高的数据会被迁移到更新的列上,而老的磁盘阵列作为二级存储则被用来存放备份数据。很多存储设备和虚拟化设备也有存储分级功能,能够实现这样的数据分层存储。 四、简化数据保护和灾难恢复 存储虚拟化技术能够帮助数据在本地和异地直接的拷贝以实现灾难恢复,很多存储虚拟化解决方案自带了远程异步复制功能。 五、易于部署 数据块级别虚拟化通常的实现方式有三种。它可以是运行在操作系统管理程序上的软件

C语言关键---static

百般思念 提交于 2020-02-28 13:40:48
static 这个关键字,我感觉对很多初级程序源和刚接触程序的同学来说,可能都没有完全理解它的含义。至少对我来说对它的认识不是很清楚。因此对它在次总结一下。主要作为自己的备忘录。 1.static关键字的第一特性: 隐藏 static 在修饰变量时分为全局变量和局部变量,都存在静态存储区域。 static全局变量:作用域是从定义的位置开始到整个所在cpp文件结束,其他cpp文件都不能使用static定义的变量,在同一个cpp文件中,在定义前使用要用extern关键字。因此static修饰变量会被隐藏在一个cpp文件里。 static 局部变量:作用域只在一个函数的内部使用,static局部变量是静态存储,因此在函数退出后,仍然保存值,再次进入函数时,static局部变量使用上次的值。 在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。 我们先举一个静态局部变量的例子,如下: //Example 3 #include <iostream.h> void fn(); void main() { fn(); fn(); fn(); } void fn() { static n=10; cout<<n<<endl; n++; }   通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存

聊聊计算和存储分离

安稳与你 提交于 2020-02-27 11:36:22
1.背景 这篇文章是我一直想写的一篇,因为“计算和存储分离”最近几年在大家的视野中出现得越来越多,但其实很多对于其到底代表着什么也是模糊不清,这里我查阅了很多的资料再结合平时自己的理解,聊聊到底什么是“计算和存储分离” 2.何为计算?何为存储? 要了解计算和存储分离到底是什么,那么我们就需要理解什么是计算,什么是存储。 计算这个单词有运算之义,和数学的关系密不可分。大家回想一下以前数学考试的时候,那一道道的数学题怎么得出结果的,这一过程其实称之为计算。那我们这里谈论的其实是计算机计算,所以我们可以得出通过计算机得到问题的结果这个就叫做计算机计算,也就是我们这里所谈论的"计算"。 对于存储来说,这个概念比较难以定义,很多人都简单的认为这个是硬盘,U盘等。但其实在我们的计算机计算过程中和存储是密不可分的,我们知道CPU是由控制器、运算器和寄存器组成的,我们在运行一段程序的时候我们的指令是存储在我们的存储器的,我们所执行的每一个步骤都和存储分离不开。比如我们以前考试的时候选择题,大家关心的只是你选择是否正确,不会关心你的运算过程,你的运算结果可以看做是硬盘,需要持久化给评卷人看,而你的计算过程类似草稿纸,虽然不需要给评卷人看,但是一样的是实实在在的写在了纸上。 上面我们说了在计算机中计算和存储其实是分离不开的,我们想想如果将计算和存储分离开来,通过高速网络进行交互