温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库如何存储元组

发布时间:2026-09-06 03:57:56 来源:亿速云 阅读:88 作者:小樊 栏目:数据库

在数据库中,“元组(Tuple)”通常指关系模型中的一行记录(row)。不同数据库在物理存储元组的方式有所不同,但核心思想一致。下面从逻辑存储物理存储两个层面说明。


一、逻辑层面:元组就是一行数据

在关系数据库中:

  • 表(Relation) = 元组的集合
  • 元组(Tuple) = 一行,由若干属性(列)组成
  • 每个元组通常有一个唯一标识:主键(Primary Key)

示例:

CREATE TABLE user (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT
);

一行数据:

(1, 'Alice', 25)

这就是一个元组。


二、物理层面:元组如何真正存到磁盘

1. 行式存储(Row Store,最常见)

MySQL (InnoDB)、PostgreSQL、Oracle:

  • 元组以**行(row)**为单位存储
  • 多行组成一个页(Page)(如 4KB / 8KB / 16KB)
  • 页是磁盘 I/O 的最小单位

InnoDB 示例:

  • 表数据按 聚簇索引(主键) 组织
  • 元组存储在 B+ 树叶子节点
  • 每行包含:
    • 事务ID
    • 回滚指针
    • 各列值
    • 可能还有 NULL 位图

2. 元组在页中的结构(简化)

[页头]
[元组1: 头信息 + 列数据]
[元组2: 头信息 + 列数据]
...
[空闲空间]
[页尾]

元组头通常包含:

  • 长度
  • 是否存在 NULL
  • 事务 / 版本信息(MVCC)

3. 列式存储(Column Store)

如 ClickHouse、HBase、Vertica:

  • 不按“行”存
  • 存储同一字段的所有值
  • 逻辑上仍是元组,物理上被拆开

适合:

  • 分析型查询(OLAP)

4. 分布式数据库中的元组

如 HBase / Cassandra:

  • 元组 = (RowKey, ColumnFamily, Column, Timestamp)
  • 按 RowKey 分片存储
  • 本质仍是“键值 + 列”

三、元组存储的关键技术点

  1. MVCC(多版本并发控制)
    • 同一元组可能有多个版本
  2. 索引
    • 索引指向元组位置(如页号 + 偏移)
  3. 压缩
    • 行压缩 / 列压缩
  4. NULL 处理
    • 使用位图或变长存储

四、一句话总结

数据库在逻辑上把元组当作“一行数据”,在物理上通常把多个元组打包进“页”,按行或按列写入磁盘,并通过索引和事务机制管理它们。

如果你指的是某种具体数据库(如 MySQL、PostgreSQL、HBase)或某种模型(关系型 / NoSQL / 向量数据库),我可以讲得更具体。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI