【问题标题】:how blobs are stored in mysqlBlob 如何存储在 mysql 中
【发布时间】:2021-07-02 22:25:39
【问题描述】:

我读到mysql的一些存储引擎可能会“外部”存储blob。

我的问题是:

  1. 将 blob 存储在外部空间有什么好处? 在线?
  2. 外部存储的 blob 如何与原始数据相关联 记录?

【问题讨论】:

  • 你在哪里读到的?
  • @Strawberry : Oreilley 的高性能 Mysql- 第 3 版
  • 这篇文章解释了外部存储仅用于无法使用内部存储的情况,因此“优势”是它可以实现原本不可能的事情。 mysqlserverteam.com/externally-stored-fields-in-innodb

标签: mysql blob storage


【解决方案1】:

Blob 是“外部的”,因为它们可能不会与给定行的其余列存储在同一页面上。它们仍然与它们关联的行存储在同一个表空间文件中。

优点是 blob 可以大于单个页面。 InnoDB 页面大小固定,默认为 16KiB。 Blob 可能高达 64KiB,Mediumblob 和 Longblob 可能分别高达 16MiB 和 4GiB。这显然需要好几页。

它们与行的关联方式因行格式而异。在所有情况下,如果给定的 Blob 恰好适合页面,它就会存储在页面中。也就是说,即使 Blob 最多允许 64KiB,您通常也可以存储较短的内容。

如果 Blob 太长而无法存储在页面中,有两种处理方式:

  • 在冗余或紧凑的行格式中,前 768 个字节与行一起存储,然后有一个指向开始存储 Blob 其余部分的页面的指针。

  • 在动态或压缩的行格式中,行页面中的 Blob 被替换为指向整个 Blob 开始的页面的 20 字节指针。

Blob 的外部页面被一一分配,最多 32 个页面(一兆字节的一半)。如果 Blob 大于此值,则一次分配更多页面 64 (1MiB)。

Text/Mediumtext/Longtext 和 Varchar/Varbinary 的处理方式也类似。它们可以大于单个页面,因此可能需要存储在多个页面上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多