3

我正在编写一个由 MySQL 数据库备份的 Web 应用程序,其中一个表有可能变得非常大(千兆字节的顺序),其中很大一部分表操作正在写入。其中一个表列需要存储一个可能非常大的字符串序列。到目前为止,在我的测试中,它的大小已达到 289 字节,但为了安全起见,我想设计的最大大小为 1 kb。目前我将该列作为 MySQL MediumBlob 字段存储在 InnoDB 表中。

同时,我一直在用谷歌搜索确定 BLOB 与其他存储形式的相对优缺点。那里的信息太多了,也许太多了。我收集到的是,InnoDB 将 BLOB 的前几个字节(如果记忆对我有用,则为 789)存储在表行本身和其他地方。我也有这样的想法,如果一行每列有多个 BLOB(我的表没有),那么“其他地方”是每个 BLOB 的不同位置。除此之外,我的印象是访问 BLOB 数据比访问行数据慢得多(这听起来很合理)。

我的问题就是这样 - 鉴于我的 BLOB 大小和表的巨大潜在大小,我应该为一个 blob 烦恼吗?另外,如果我使用某种形式的行内存储,这不会对表能够容纳的最大行数产生不利影响吗?

MySQL 很简洁,可以让我摆脱开发环境中的几乎所有事情。但是……那不是真实的世界。

4

2 回答 2

1

如果 BLOB 数据大于 250kb,则不值得。在你的情况下,我不会打扰自己 BLOB'n。读这个

于 2012-09-27T15:52:00.627 回答
1

我相信你已经看过这里,但是很容易忽略一些细节,因为在涉及 InnoDB 限制时需要牢记很多。

您的一个问题(表的最大大小)的简单答案是 64TBytes。使用可变大小类型将存储移动到单独的文件中肯定会改变行数的上限,但 64TBytes 是相当大的空间,因此比率可能非常小。

将具有 1KByte 字符串类型的列存储在表中似乎是一个可行的解决方案,因为与 64TBytes 相比,它也非常小。特别是如果您对查询速度有非常严格的要求。

此外,请记住,InnoDB 64TByte 限制可能会被您正在使用的操作系统的最大文件大小推低。您始终可以将多个文件链接在一起,以便为您的表格腾出更多空间,但随后它开始变得更加混乱。

于 2012-09-27T15:52:25.813 回答