这是我参与「第五届青训营」伴学笔记创作活动的第8天。今天学习的是存储和数据库相关知识。
数据持久化的过程是先校验数据的合法性,符不符合规范;然后修改内存,用高效的数据结构组织数据;最后以性能高效和对硬件友好的方式将数据写入存储介质。存储系统的特点是:作为后端软件底座,性能敏感;软件架构容易受硬件影响;存储系统代码既简单又复杂,简单是指语法较为符合自然语言,复杂是指代码后的操作十分复杂。单机存储系统的常用技术是RAID技术。它将多块磁盘简单组合,数据条带化存储,提高磁盘带宽,一块磁盘对应一块额外镜像盘,虽然真实空间利用率仅0.5,但容错能力强。数据库主要分为关系型数据库和非关系型数据库。关系型数据库是存储系统,但存储之外,又有对结构化数据友好,支持事务和支持复杂查询语言的特点。
单机存储是单个计算机节点上的存储软件系统,一般不涉及网络交互,主要有本地文件系统和key-value存储。本地文件系统经典的是Linux文件系统。文件系统的管理单元是文件。文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口。Linux文件系统的两大数据结构是lndex Node和Directory Entry。lndex Node记录文件元数据, 如id、大小、权限、磁盘位置等;inode是一个文件的唯一标识,会被存储到磁盘上;inode的总数在格式化文件系统时就固定了。Directory Entry记录文件名、inode指针,层级关系(parent)等;dentry是内存结构,与inode的关系是N:1。key-value存储的常见数据结构是LMS-Tree,某种程度上牺牲读写性能,追求写入性能。分布式存储是在单机存储基础上实现分布式协议,涉及大量网络交互,主要有分布式文件系统和分布式对象存储。单机数据库是单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务。