优化数据库中的 MySQL 文件 (blob)
Posted
技术标签:
【中文标题】优化数据库中的 MySQL 文件 (blob)【英文标题】:Optimizing MySQL files in database (blob) 【发布时间】:2011-07-16 04:38:29 【问题描述】:由于内部原因(框架结构),我将许多图像保存在一个带有 mediumBLOB 的表中。
考虑到检索这些图像的查询是以相当低的速率发送的,有没有办法告诉 mysql 将该表从内存中排除?我不想让一张 2GB 内存的表偶尔使用一次。
有什么办法可以优化吗?
(注意:如果这有帮助,我可以将此表移动到仅包含此表的新数据库中)
谢谢
【问题讨论】:
【参考方案1】:MySQL 不会为 BLOB 类型生成内存表,因为存储引擎不支持它。
http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html
“某些情况会阻止使用内存中的临时表,在这种情况下,服务器会使用磁盘表来代替:
表中存在 BLOB 或 TEXT 列"这意味着您应该将 BLOB 放入不同的表中,并将其他有用的数据保留在 BLOBless 表中,以便优化该表。
【讨论】:
什么? O_O 我的主表有一个 TEXT 列(用于文章)你是说我的主表需要磁盘访问才能被解析? O_O @yes123:没错。克服这个问题的另一种方法是拥有一个大 RAM 磁盘,然后 MySQL “欺骗”使用它。 无论你的RAM是否很大,问题是无法估计内存消耗。一种解决方案是使用内存直到 XX GB,然后放弃内存解决方案并转向磁盘。你能想象不可预知和可怕的用户体验,当 TABLE 变得太大时,数据库引擎做出反应,将数据处理推回慢 100 倍的介质? (^_^) 那么我想知道为什么我的mysql进程那么大..我所有最大的表都应该只在磁盘上,因为TEXT-BLOB =/也许mysql将主索引保存在表中? MySQL 将所有索引推送到内存中,如果它适合允许的内存(配置文件:key_buffer_size=XXXM,其中 XXX 是以兆字节为单位的数量)【参考方案2】:对我来说,将这种表移到单独的数据库中听起来是一种非常有效的方法。在工作中,我们有一台用于操作内容(订单、目录等)的数据库服务器和一台用于日志(网络日志和电子邮件副本)和媒体(图像、视频和其他二进制文件)的数据库服务器。即使在同一台机器上运行单独的实例也是值得的,因为正如您所提到的,它会划分缓冲区缓存(或任何您的存储引擎的等价物)。
【讨论】:
以上是关于优化数据库中的 MySQL 文件 (blob)的主要内容,如果未能解决你的问题,请参考以下文章
java 以二进制流的方式读取mysql 中的blob文件,并写入本地文件夹下
如何将从blob url获取的音频数据保存到mysql db中的文件系统和路径中