存储再探|青训营笔记

125 阅读3分钟

存储再探|青训营笔记

这是我参与「第五届青训营」伴学笔记创作活动的第18天

在后面会依次倒叙回顾之前的学习课程,便于复习~

深入了解了Linux文件系统与非关系型数据库KV,再次进行记录~

一、Linux文件系统

image-20230211103610049.png

  • 基本组成

    文件系统是操作系统中负责管理持久数据的子系统,实际上,就是将用户的文件存放在磁盘硬件中,即使计算机断电了,磁盘里的数据并不会丢失,所以文件系统就可以持久化的保存文件。

    • 在Linux中,一切皆文件,不仅普通的文件和目录,块设备、管道、socket等等,都是由文件系统管理的。在Linux中的文件系统会给每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们都主要是被用来记录文件的元信息和目录层次结构。索引节点,inode,用来记录文件的元信息,比如inode编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等。
    • 索引节点是文件的唯一标识,它们之间一一对应,也同样都是被存储在硬盘当中,索引节点也是会占用磁盘的存储空间的。
    • 目录项,dentry,用来记录文件的名字,索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但是它与索引节点不相同的是,目录项是由内核维护的一个数据结构,不是存放咋磁盘中,而是缓存在内存里面。目录项包括文件名和inode节点号。
    • inode映射表:inode bitmap:位图:记录着哪些inode使用了,哪些没有使用。
    • block映射表:block bitmap:记录着哪些block使用了,哪些没有使用。

二、KV数据库

image-20230211103637032.png

  • 传统的关系型数据库其实就是行式数据库,就是一行一行的方式来存储信息的。列式数据库列式数据库一般应用于对应大量的字符串数据,实例如HBase,cassandra,Sybase IQ,HP Vertica、EMC Greenplum等。列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生,主要适合于批量数据处理和即时查询。

  • 非常适合做聚合操作。键值数据库即Key-Value存储,简称KV存储。它是NoSQL存储的一种方式。它的数据按照键值对的形式进行组织,索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。典型的产品有: 亚马逊的DynamoDB,redis。

  • 与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。比如,CouchDB,MongoDB等。