【发布时间】:2011-01-09 08:46:49
【问题描述】:
我正在处理最多 - 我估计 - 大约 100 KB 的 blob 尺寸。数据已经压缩了。
存储引擎:MySQL 5.1 上的 InnoDB
前端:PHP(带有 Propel ORM 的 Symfony)
一些问题:
我在某处读到过更新 blob 不好,因为 它会导致重新分配、碎片化,因此很糟糕 表现。真的吗?有这方面的参考吗?
-
最初,blob 是通过附加数据块来构造的。每个 块的大小最大为 16 千字节。使用a是否更有效 而是单独的块表,例如具有如下字段?
parent_id, position, chunk然后,要获取整个 blob,可以执行以下操作:
SELECT GROUP_CONCAT(chunk ORDER BY position) FROM chunks WHERE parent_id = 187结果将用于 PHP 脚本。
blob 的类型之间是否有任何区别,除了 元数据所需的大小,应该可以忽略不计。
【问题讨论】:
-
GROUP_CONCAT() 不适合这个。默认情况下,它的最大长度限制为 1024 字节(尽管您可以使用 group_concat_max_len 进行更改)。您还必须非常小心地构建查询 - 如果块以错误的顺序分组/连接会发生什么?
-
我认为限制没有问题,因为它可以扩展。关于以正确的顺序进行连接:这就是我提出
position字段的原因。这还不够吗? -
只需选择每个块并在 PHP 中连接它们。或者,如果您要输出它们,则输出它们而不连接它们。
-
araqnid:我为什么要这样做?有什么好处?事实上,我假设 MySQL 在这一步上效率更高。顺便说一句,然后对连接的结果进行后处理。它不会发送到屏幕上。
标签: php sql mysql performance propel