存储结构的问题

宏块是数据文件写IO的基本单位, 意思是一次写2MB,一次读2MB?

@论坛小助手 宏块是数据文件写IO的基本单位, 意思是一次写2MB,一次读16KB?

根据文档库中的信息,您的理解大部分是正确的,但需要一些补充和澄清:

  • 宏块(Macro Block):确实是 OceanBase 数据库中数据文件写 IO 的基本单位。每个宏块的大小固定为 2MB。这意味着在写入数据时,OceanBase 会以 2MB 的宏块为单位进行写操作。参考自“OceanBase 数据库将磁盘切分为大小为 2MB 的定长数据块,称之为宏块(Macro Block),宏块是数据文件写 IO 的基本单位”。

  • 微块(Micro Block):宏块内部进一步划分为多个微块,每个微块的大小通常是 16KB(这是压缩前的大小)。微块是数据文件读 IO 的最小单位。因此,在读取数据时,OceanBase 会以 16KB 的微块为单位进行读操作。参考自“OceanBase 数据库的数据文件以宏块(Macro Block)为单位组织数据,每个宏块大小为 2 MB。宏块内部又划分出很多个16 KB(压缩前的大小)大小的微块(Micro Block),而每个微块里面包含多个行(Row)。OceanBase 数据库内部 IO 的最小单位是微块。”

总结:

  • 写 IO 的基本单位是宏块(2MB)。
  • 读 IO 的最小单位是微块(16KB,默认情况下)。

所以,您提到的“一次写2MB,一次读16KB”是正确的。希望这些信息能帮助您更好地理解 OceanBase 的存储结构。如果您有更多问题,请随时提问。

具体信息可参考以下文档:

  1. OceanBase 术语
  2. 集群管理 FAQ
  3. 表存储
  4. 发现磁盘的静默错误
  5. 备份架构
  6. 压缩与编码
  7. MemTable
  8. 产品 FAQ
2 个赞

普通表的数据和索引,存储在同一个table store里 ?

@论坛小助手

根据文档库中的信息,关于普通表的数据和索引是否存储在同一个 Table Store 中,可以总结如下:

数据和索引的存储方式

  1. 数据存储

    • 在 OceanBase 数据库中,普通表的数据以分片的形式存储于每个节点。数据首先写入内存中的 MemTable(由 BTree 和 Hashtable 组成),然后通过转储操作将数据从 MemTable 转储到磁盘上的 SSTable 中。
    • SSTable 是静态数据结构,采用 LSM-Tree(Log-Structured Merge Tree)模型,包含多个宏块(Macro Block),每个宏块大小为 2MB。宏块内部进一步划分为多个微块(Micro Block),每个微块大小通常是 16KB。
  2. 索引存储

    • OceanBase 使用聚集索引表模型来组织数据,即数据按照表的主键顺序存储。这意味着主键索引与数据是紧密关联的。
    • 对于非主键索引(例如二级索引),它们会单独存储,并且与主表数据分开。二级索引的存储位置和方式与主表数据不同,但仍然遵循类似的 LSM-Tree 模型。

综合结论

  • 主键索引:主键索引与数据存储在一起,因为数据本身就是按照主键顺序存储的。因此,主键索引和数据可以认为是存储在同一个 Table Store 中。
  • 二级索引:二级索引是独立存储的,不会与主表数据存储在一起。二级索引有自己的存储结构和位置。

文档依据

  • 聚集索引表模型:参考自“OceanBase 数据库中使用聚集索引表模型来组织,也就是存储时按照表的主键顺序来存储数据。”
  • SSTable 结构:参考自“OceanBase 数据库将一些数据库对象的数据存储在一个或者多个 SSTable 中,一个 SSTable 包含一个或多个宏块,每个宏块中包含一个或多个微块。”

希望这些信息能帮助您更好地理解 OceanBase 中普通表的数据和索引的存储方式。如果您有更多问题,请随时提问。

具体信息可参考以下文档:

  1. 创建数据库
  2. MemTable
  3. 分布式执行和并行查询
  4. 使用 MySQL 租户做常见数据库开发
  5. 列存 FAQ
  6. 分布式数据库对象概述
  7. 表存储
  8. 数据库对象存储
  9. 表概述
  10. 发现磁盘的静默错误
1 个赞

普通表 和普通表二级索引 存储在不同的partition里? @论坛小助手

根据文档库中的信息,关于普通表和其二级索引是否存储在不同的分区中,可以总结如下:

普通表与二级索引的存储方式

1. 主键索引(聚集索引)

  • 存储位置:主键索引与数据存储在一起。因为 OceanBase 使用的是聚集索引表模型,数据按照主键顺序存储,所以主键索引和数据是紧密关联的。
  • 分区策略:主表的数据和主键索引遵循相同的分区策略,即它们会存储在同一个分区中。

2. 二级索引

  • 存储位置:二级索引是独立存储的,不会与主表数据存储在一起。二级索引有自己的存储结构和位置。
  • 分区策略
    • 局部索引:局部索引与主表的分区绑定在一起,每个主表分区都有自己对应的局部索引分区。因此,局部索引和主表数据会存储在相同的分区中。
    • 全局索引:全局索引是独立于主表的,可以在系统租户中创建额外的分区记录。全局索引可以有自己的分区策略,并且可以存储在与主表不同的节点上。这意味着全局索引和主表数据可能会存储在不同的分区中。

综合结论

  • 局部索引:普通表和其局部二级索引会存储在相同的分区中。
  • 全局索引:普通表和其全局二级索引可能会存储在不同的分区中,甚至不同的节点上。

文档依据

  • 局部索引与全局索引的区别:参考自“局部索引与全局索引的区别”章节,其中详细描述了局部索引和全局索引的存储和分区特性。
  • 聚集索引表模型:参考自“OceanBase 数据库采用的是聚集索引表模型,对于用户指定的主键,系统会自动生成主键索引”。

希望这些信息能帮助您更好地理解 OceanBase 中普通表和其二级索引的存储方式。如果您有更多问题,请随时提问。

具体信息可参考以下文档:

  1. OceanBase 术语
  2. SQL FAQ
  3. 使用 MySQL 租户做常见数据库开发
  4. 集群管理 FAQ
  5. OceanBase 数据库性能的影响因素
  6. 表概述
  7. 分布式执行和并行查询
  8. 数据分布
  9. 分区概述
  10. OceanBase 数据库和 MySQL 兼容性介绍

直接和 https://www.oceanbase.com/obi 私聊吧~

1 个赞

谢谢你