一张图掌握数据存储

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

数据存储有个学名:数据持久化,对信息系统来说,本质也是解决数据网络,数据存储,数据使用的问题,所以有必要对相干的知识点创建知识体系。数据存储体系五花八门,假如没有把握好技术选型,就有大概碰到访问速度慢,扩展性低的问题。1、单机文件系统文件存储在机械或者固态硬盘上,存储容量和单机磁盘空间巨细相干。1.1、文件保存格式操作系统将硬盘空间以块为单位进行划分,每个文件占据若干个块。操作系统通过一个文件控制块 FCB 记录每个文件占据的硬盘数据块。如下图所示
文件控制块也叫inode,存储文件的元信息,要想访问文件,就必须获得文件的 inode(文件控制) 信息,在 inode 中查找文件数据块索引表,根据索引中记录的硬盘地点信息访问硬盘,读写数据。inode 最多可以存储 12+256+256*256+256*256*256 个数据块,假如每个数据块的巨细为 4k,也就是单个文件最大不凌驾 70G
1.2、存储空间扩容1.2.1、单机磁盘扩容单机磁盘巨细可以使用linux工具扩容,linux系统提供了物理卷和逻辑卷管理工具,使用逻辑卷整合物理卷,增长逻辑卷巨细扩充可用磁盘空间。1.2.1.1、逻辑卷使用物理卷和逻辑卷使用pv--> vg-->lv三个下令pv操作物理卷:常用下令:创建物理卷 pvcreate ; 查询物理卷pvs
vg操作卷组,一个卷组包含多个物理卷:常用下令:创建卷组vgcreate ;查询卷组vgs
lv操作逻辑卷:常用下令:创建逻辑卷 lvcreate -L 100M(空间巨细) -n(lv名称) vg1(卷组名称) ;查询lv :lvs逻辑卷可以动态扩容,这是linux卷管理最强大的地方,目录假如mount逻辑卷,有新的磁盘加入可以随时扩容。1.2.2、使用RAID扩容假如有独立的多块磁盘或磁盘阵列,可以使用raid工具做raid磁盘。1.3 文件操作文件有随机读写温顺序读写两种,步伐操作单机文件,可以使用各自语言类库,好比java有File、FileReader、FileWriter等类库。2、分布式文件系统分布式文件系统主要有FastDFS,Minio,HDFS,其中:Minio是最常用的对象存储,它兼容Amason的S3 分布式对象存储,用Golang语言实现,客户端支持python,java。2.1 分布式对象存储存储形式:以对象形式存储,可以用返回josn object形式对象存储要点:1、把文件分成巨细相等块儿,便于维护管理;2、把这些块儿分散到不同的数据节点上,来提升读写性能;3、文件在那些数据节点,由原数据服务器维护,可以用ZooKeeper做元数据集群,存储服务首先用请求中的 Key,去元数据集群查找这个 Key 在哪个数据节点上,然后再去访问对应的数据节点读写数据,最后把结果返回给客户端。4、为了减少元数据的数据量,数据块会被聚合,放到一个容器里面,容器的巨细是固定的,容器内的块数也是固定的。
2.2 HDFS存储框架第HDFS是hadoop生态系统标准的存储框架,hadoop系统另有计算框架map reduce(现在根本都是spark替代了,saprk算子丰富,速度快),调理框架yarn。HDFS存储要点:1、由NAMENODE(生产环境不会单点,是集群)和DataNode构成;2、数据读取,先访问NameNode,获得block位置再访问block所在datanode;3、写数据反之,如图所示
 

 
总结1.维护整个文件系统的文件目录树,文件目录的元信息和文件数据块索引2.以FsImage和EditLog形式存储在本地(FsImage目录树镜像到磁盘,EditLog日志文件)3.整个系统的单点,存在SPOF(Simple Point of Failure)4.没有元数据中心的情况:使用hash取模:一致性hash算法1.又名CheckPoint Node,定期合并FsImage和EditLog2.不吸收客户端的请求,作为NameNode的冷备3.使用Zookeeper实现NameNode HA
1.实际存储数据的单元2.以Block为单位3.数据以普通文件形式保存在本地文件系统4.dataNode演示图如下 
 3、数据库存储数据库软件作为业务逻辑处理和数据存储的中间环节,包括hive sql与spark sql全部的数据库软件根本实现思绪都一样,查询sql颠末词法分析,语法分析产生实验筹划,根据数据的存储方式(单机,raid,分布式文件系统hdfs),逻辑实验筹划和物理实验筹划会有所不同。这篇文章重点在存储部分,其它内容会简单提一下,在其它文章中再具体说。3.1 关系型数据库关系型数据的存储的逻辑结构都是表3.1.1 mysqlmysql的架构:
MySQL默认的存储引擎是 InnoDB,数仓的话MyISAM。 在 InnoDB 中存储引擎中,数据表的物理存储结构是以主键为关键字的 B+ 树,每一行数据直接就保存在 B+ 树的叶子节点上。在 InnoDB 中,表的索引也是以 B+ 树的方式来存储的,和存储数据的 B+ 树的区别是,在索引树中,叶子节点保存的不是行数据,而是行的主键值。
固然逻辑上每个表是一颗 B+ 树,但是物理上,每条记录都是存放在磁盘文件中的,这些记录通过一些位置指针来组织成一颗 B+ 树。当 MySQL 删除一条记录的时候,只能是找到记录所在的文件中位置,然后把文件的这块地区标记为空闲,然后再修改 B+ 树中相干的一些指针,完成删除。其实那条被删除的记录照旧躺在谁人文件的谁人位置,所以并不会释放磁盘空间。3.1.2 oracleoracle的根本存储单位是block,这和mysql是不一样的,mysql的存储单位是页Oracle数据存储单位  a、block 数据块: 2k  最小的I-O单位,伴随database产生而产生,不可变  b、extent 一组连续的数据块:是用户所能分配存储的最小单位  c、segment 段:有共同结构的一个或几个地区( extent)  d、tablespace 表空间:一组物理数据的逻辑组合,(象逻辑间数据仓库)  e、 file 文件:属于某个表空间的物理文件 3.2 其他数据库3.2.1 hbase3.2.1.1 hbase存储的逻辑结构使用的列族筹划,在创建表的时候,只需要指定列族的名字,无需指定字段(Column)。在数据写入时再指定指定字段即可 
 3.2.1.2 hbase存储物理结构
这里HFile也是HDFS文件3.2.2 hiveHive可以看做一个实验器,如下图所示,就是我们上图看到词法分析、语法分析到实验筹划,存储引擎是HDFS+Map-Reduce
sHive的实验引擎(严格来说是物理实验引擎)是可以替换的,有了Hive on Spark,Hive on Tez。3.2.3 redisRedis 只能支持有限的几个 API,险些没有聚合查询的能力,也不支持 SQL。它的存储引擎也非常简单,直接在内存中用最简单的数据结构来保存数据redis支持的逻辑层数据结构有:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)(List,Hash、Set和 Sorted Set称为集合类型,一个键对应了一个集合的数据)。reids物理存储结构一共有 6 种:简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。
redis更新一般接纳Cache Aside模式Cache Aside
 3.2.4 mq消息队列mq提供了异步数据传输,数据通过消息队列传递3.2.4.1 Rabbitmq1、业务系统之间一般rabbitmq用的比力多2、、消息是可以持久化保持到磁盘的,持久化消息在到达队列时写入磁盘,同时会内存中保存一份备份,非持久化消息一般只存于内存中,当内存压力大时数据刷盘处理,以节省内存空间3、消息队列消息体中传递的是字节序列,。消息体中字节序列由文本、 二进制数、JSON、XML这些根本数据结构序列化

3.2.4.2 Kafka使用 Kafka 来存储。现代的消息队列,本质上就是分布式的流数据存储系统,Kafka 官方给本身的定位也是“分布式流数据平台”,不但是一个 MQ。Kafka 提供“无限”的消息堆积能力,具有超高的吞吐量,可以满足我们保存原始数据的大部分要求。下游的计算使命,可以作为消费者订阅消息,也可以按照时间或者位点来读取数据。 Kafka 的吞吐量远大于HDFS。3.2.5 时序数据库这些时序数据库能提供很方便的查询和聚合数据的能力。主要存储有时间特征并且数据内容都是数值的数据。国产的TDengin在项目中使用,感觉不错。总结:数据库做为应用步伐和存储之间的一层,极大丰富了存储形式和存储空间的使用;各类五花八门的数据库,根本思绪是一致的。下面这张图总结了上面内容。

 
数据库选型思绪:数据量支持的情况下,首选关系型数据库,假如mysql,功能丰富能解决大部分问题;假如数据量级已经凌驾 MySQL 极限(单表300万以上就已经很慢),可以选择es或者一些列式数据库,好比:HBase、Cassandra、ClickHouse,数据量再增长也可以思量Spark、Hive 。总的来说,就是根据不同的查询需求,组织成不同的数据结构,存放在得当的存储系统。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表