存储 & 数据库学习 | 青训营

66 阅读6分钟

存储系统和数据库,通常指的是数据的持久性存储和管理。在CS中,数据存储是指将数据保存在持久性介质(如硬盘、固态硬盘、云存储等)上,以便在程序关闭后仍然能够访问和使用这些数据。数据库则是一种专门用于管理、存储和检索数据的系统。

存储系统

存储通常分为两种类型:内存存储和持久性存储。内存存储是指将数据保存在计算机的内存中,这种数据在程序关闭后会丢失。而持久性存储是指将数据保存在硬盘、SSD、网络存储等介质上,以便长期保留。

特点: 存储系统的主要特点包括持久性、可靠性、性能和可扩展性。

  • 持久性: 存储系统的数据在断电或重启后仍然存在,不会丢失。
  • 可靠性: 存储系统需要提供数据的完整性和一致性,以防止数据损坏或丢失。
  • 性能: 存储系统的性能因素包括读写速度、响应时间和吞吐量。
  • 可扩展性: 存储系统应该能够根据需要扩展存储容量和性能。

存储器层级结构: 存储器层级结构是指计算机系统中各种不同速度和容量的存储设备按照层级划分的组织方式。典型的存储器层级结构包括:

  • 寄存器: 最快速但容量最小的存储,用于存储CPU的临时数据。
  • 高速缓存(Cache): 位于寄存器和主存(RAM)之间,用于存储CPU频繁访问的数据,以提高访问速度。
  • 主存(RAM): 较大容量的存储,用于存储正在执行的程序和数据。
  • 辅助存储: 包括硬盘驱动器、固态驱动器等,用于持久存储数据。

单机存储栈: 单机存储栈是指计算机系统中用于存储数据的不同层级。它包括各种存储设备,从最快速但最小容量的寄存器到较慢但更大容量的辅助存储设备。程序在执行过程中,数据会根据需要从不同的层级间进行迁移,以平衡性能和容量。

RAID技术: RAID(冗余磁盘阵列)是一种将多个物理磁盘组合成单个逻辑存储单元的技术,旨在提高数据的可靠性和性能。RAID技术分为多个级别,如RAID 0、RAID 1、RAID 5等,每个级别在数据分布、冗余性和性能方面有所不同。例如,RAID 0将数据分布在多个磁盘上以提高性能,但没有冗余性,而RAID 1通过镜像数据以提高可靠性。

数据库

数据库是一个有组织的数据集合,其目标是高效地存储、检索和管理数据。数据库通常支持结构化数据,这意味着数据按照表格(表)的形式进行组织,每个表包含不同的字段(列)和记录(行)。数据库系统允许用户使用查询语言(如SQL)来执行各种操作,包括插入、更新、删除和查询数据。

数据库可以分为不同类型,包括关系型数据库(如MySQL、PostgreSQL)、非关系型数据库(如MongoDB、Redis)、图数据库(如Neo4j)等。每种类型的数据库都适用于不同的场景和需求,具有各自的优势和限制。

使用方式: 数据库可以按照不同的方式使用,具体取决于应用的需求和数据库类型。以下是一些常见的数据库使用方式:

  1. 数据存储: 数据库用于持久性存储数据,包括用户信息、产品数据、日志等。
  2. 数据检索: 使用查询语言(如SQL)从数据库中检索所需数据,可以根据条件筛选、排序和聚合数据。
  3. 数据分析: 数据库支持复杂的数据分析操作,如连接多个表格、计算聚合统计等。
  4. 事务管理: 对于需要事务性操作的应用,数据库可以确保数据的一致性和完整性。
  5. 并发访问: 数据库可以支持多个用户同时访问和修改数据,通过并发控制机制保证数据的正确性。
  6. 备份和恢复: 数据库可以定期备份数据,以防止数据丢失,并在需要时进行恢复。

在Go语言中,可以使用不同的库和框架来处理存储系统和数据库。一些常用的数据库库包括:

  • database/sql 包: 这是Go标准库提供的数据库访问接口,允许您使用不同的数据库驱动程序进行交互,如MySQL、PostgreSQL等。
  • gorm: GORM 是一个流行的 Go ORM(对象关系映射)库,它提供了一种更加高级的方式来管理和操作数据库,使得操作数据库的过程更加简化和抽象化。
  • mongo-go-driver: 如果您想使用 MongoDB,可以使用官方提供的 mongo-go-driver 包来进行与 MongoDB 数据库的交互。
  • redis: 对于 Redis 数据库,可以使用 go-redis 等库来进行与 Redis 的通信。

简单实例

一个简单的模拟案例:一个在线购物网站的后端系统。以下是关于数据生成、流通和存储的一般过程:

模拟案例:在线购物网站后端系统

  1. 数据生成: 假设用户在网站上浏览商品、添加商品到购物车、下订单等操作。每个操作都会生成相关的数据,如用户信息、商品信息、购物车内容和订单细节。
  2. 数据流通: 用户的操作会触发前端和后端之间的交互。例如,用户浏览商品时,前端会向后端发送请求以获取商品信息。用户添加商品到购物车或下订单时,前端会将相关数据传递给后端。这些数据在前端和后端之间通过API(应用程序接口)进行交换。
  3. 后端处理: 后端服务器接收到前端发送的请求和数据。后端会对数据进行验证、处理和逻辑计算。例如,后端可能会验证用户的身份、检查商品库存、计算订单总价等。
  4. 数据存储/数据库系统: 在后端处理过程中,生成的数据需要被存储以备将来使用。这些数据可以存储在数据库中。假设我们使用关系型数据库(如MySQL)来存储数据。在这一步,数据会被转化为数据库中的表格、行和列的形式。
  5. 数据写入数据库: 后端应用程序会使用数据库连接库来与数据库进行交互。例如,在Go语言中,可以使用database/sql库。后端会将处理过的数据以适当的格式传递给数据库连接,然后执行插入或更新等数据库操作。
  6. 数据库操作: 数据库连接库会将后端发送的数据转化为SQL查询,并将其发送到数据库。数据库执行这些查询,将数据写入相应的表格中。例如,如果用户下了订单,订单数据会被插入到订单表格中。
  7. 持久存储: 一旦数据被成功写入数据库,它就会持久存储在磁盘中。即使系统关闭或重启,存储在数据库中的数据仍然存在。