一、单机存储
1.1 单机存储简介
单机存储指的是将数据存储在单个计算机或设备上的存储方式。这种存储方式通常用于小规模的个人计算机或单用户环境中,数据直接存储在本地磁盘或其他存储介质上。
1.2 单机存储简介——本地文件系统
单机存储的本地文件系统是指用于管理和组织存储在计算机硬盘或其他存储介质上的文件和目录的软件系统。Linux有经典的名言:一切皆文件。文件系统的管理单元:文件。文件系统接口:文件系统繁多,如Ext2/3/4,
sysfs, rootfs等,但都遵循VFS的统一抽象接口。
Linux文件系统的两大数据结构:Index Node 和 Directory Entry。
Index Node记录文件元数据,如id、 大小、权限、磁盘位置等。inode是一个文件的唯一 标识, 会被存储到磁盘上。并且inode的总数在格式化文件系统时就固定了。
Directory Entry记录文件名、inode指针,层级关系(parent)等。dentry是内存结构,与inode的关 系是N:1(hardlink的实现)
1.3 单机存储简介——key—value存储
单机存储的key-value存储是一种简单而常见的数据存储模型,它将数据以键值对的形式进行存储和检索。每个键(key)都是唯一的,并且与一个特定的值(value)相关联。
一些常见的单机key-value存储系统包括Redis、Memcached和LevelDB等。这些系统提供了对键值对的高效存储和检索,并且支持丰富的功能,如事务、持久化、分布式复制等。它们可以被广泛应用于各种应用程序和服务中,以提高性能和可伸缩性。
常见数据结构: LSM-Tree, 某种程度上牺牲读性能,追求写入性能
二、分布式存储
2.1 分布式存储简介
分布式存储=在单机存储基础、上实现了分布式协议,涉及大量网络交互。分布式存储是在单机存储的基础上实现了分布式协议,并涉及大量的网络交互。与单机存储相比,分布式存储将数据存储在多台计算机或服务器上,通过网络连接这些计算机,使其共同组成一个存储集群。
常见的分布式存储系统包括Hadoop分布式文件系统(HDFS),Amazon S3,Ceph和GlusterFS等。这些系统采用了各种分布式协议和算法来管理数据的存储、复制、分片和访问。分布式存储可以应用于大规模的数据存储和处理场景,如云存储、大数据分析和分布式数据库。
2.2 分布式存储一HDFS
HDFS的研发时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐。因此Hadoop分布式文件系统(简称HDFS)作为一个高容错性、高可靠性的分布式文件系统,旨在存储大规模数据集并提供快速的数据访问。HDFS将数据分布存储在一个集群中的多台计算机上,通过网络连接这些计算机形成一个逻辑上的整体。
HDFS核心特点有以下几点:
● 支持海量数据存储;
● 高容错性;
● 弱POSIX语义;
● 使用普通x86服务器,性价比高;
HDFS广泛应用于大数据领域,可用于数据仓库、数据分析、日志存储和备份等场景。开发者可以使用Hadoop生态系统中的工具和API来访问和管理HDFS中的数据,如Hadoop MapReduce、Apache Hive和Apache Spark等。
2.3 分布式存储一Ceph
Ceph是开源分布式存储系统里的「万金油」。它作为一个开源的分布式存储系统,旨在提供高性能、高可靠性和可扩展性的存储解决方案。Ceph采用了一种分布式对象存储架构,可以轻松地扩展到大规模的存储集群,并支持多种数据存储接口。
以下是Ceph的一些关键特点:
三、单机数据库
3.1 单机数据库简介
单机数据库=单个计算机节点上的数据库系统。运行事务在单机内执行,也可能通过网络交互实现分布式事务。并且单机数据库是一种基于单台计算机的数据库系统,用于管理和存储数据。与分布式数据库不同,单机数据库只在一台计算机上运行,适用于小型应用或个人使用。
以下是一些常见的单机数据库:
这些单机数据库系统都提供了结构化数据的管理和查询功能,通过SQL(Structured Query Language)进行数据操作和检索。它们可以通过本地连接或网络连接来访问,并且具有各自的管理工具和开发接口,方便用户进行数据库的管理和应用程序的开发。
需要注意的是,单机数据库的容量和性能受限于单台计算机的资源,无法像分布式数据库那样实现横向扩展。因此,在需要处理大量数据或高并发访问的场景中,可能需要考虑使用分布式数据库系统来满足需求。
3.2 单机数据库——关系型数据库
关系型数据库(Relational Database)是一种基于关系模型的数据库系统。它使用表格(也称为关系)来存储和组织数据,其中每个表格包含了多行和列,表示实体(Entity)和属性(Attribute)之间的关系。关系型数据库使用结构化查询语言(SQL)进行数据操作。
关系型数据库的通用组件包括:
Query Engine——负责解析query,生成查询计划;
Txn Manager——负责事务并发管理;
Lock Manager——负责锁相关的策略;
Storage Engine——负责组织内存/磁盘数据结构;
Replication——负责主备同步。
一些常见的关系型数据库系统包括:
在关系型数据库中,对于商业产品Oracle称王,对于开源产品MySQL & PostgreSQL称霸。
在关系型数据库中,存储部分的蓝色树部分每个节点为Page,对于每个节点有记录操作日志Redo Log,redo log (重做日志) 是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,InnoDB 存储弓|擎会使用redo 1og 恢复数据,保证数据的持久性与完整性。并且也会记录临时数据Temp data,最后将Redo Log和临时数据传入磁盘中。
3.3单机数据库——非关系型数据库
非关系型数据库(NoSQL,Not Only SQL)是一种与传统的关系型数据库不同的数据库系统。它通过放宽对数据模型的要求和提供更高的可扩展性,适用于处理大规模、分布式和非结构化数据的场景。对于如今的非关系型数据库来说,有着MongoDB、Redis、Elasticsearch三足鼎立的局面。
关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同。非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活。不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”
MongoDB
●面向「文档」存储;
●文档可序列化成JSON/BSON,支持嵌套;
●存在「collection」 ,collection= 文档的集合;
●存储和构建索引能力依赖wiredTiger引擎;
●4.0后开始支持事务(多文档、跨分片多文档等);
●常用client/SDK交互,可通过插件转 译支持弱SQL。
Elasticsearch
●面向「文档」存储;
●文档可序列化成JSON,支持嵌套;
●存在「 index」,index=文档的集合;
●存储和构建索引能力依赖Lucene引擎;
●实现了大量搜索数据结构&算法;
●支持RESTFUL API,也支持弱SQL交互;
Redis
●数据结构丰富(hash表、 set、 zset、 list);
●C语言实现,超高性能;
●主要基于内存,但支持AOF/RDB持久化;
●常用redis- cli/多语言SDK交互。