首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将二进制图像数据直接存储在表中可能考虑的因素和缺点是什么?

问将二进制图像数据直接存储在表中可能考虑的因素和缺点是什么?
EN

Database Administration用户
提问于 2011-08-21 20:59:50
回答 1查看 1.5K关注 0票数 5

虽然与这问题有关,但我有一个稍微不同的角度来处理这个问题。以下是我的情况:

我正在编写一个web应用程序( PHP或Python)来管理桌面应用程序的加载项。用户可以浏览加载项,安装它们,上传它们等等。

我正在计划数据库的模式,并发现自己决定:

更好的方法是将图标(对于加载项)存储在表本身中,还是将它们存储在文件系统中,只在表中存储一个文件名?

图标很小(48x48或接近它),最多不会占用超过5或6 KB。在表中存储图像数据有什么严重的缺点吗?还有什么其他的问题我应该知道吗?表演是否值得关注?储存会是个问题吗?

编辑:我目前正在查看MyISAM数据库中的MySQL表。

EN

回答 1

Database Administration用户

发布于 2011-08-22 16:49:49

另一个让存储图像数据相当困难的有趣的方面是具有正确的数据包大小。我在2011年4月27日写过这封信。

由于图像将存储在BLOB字段中,因此将通过程序(如mysqldump)、基础设施(如MySQL复制)和一般查询用法(例如,在联接期间在内部临时表中包含BLOB数据和子句删除)对BLOB数据进行内部操作和/或外部通信。

此外,正如前面的URL所提到的,InnoDB存储引擎有一种处理内存中的数据包和记录文件的方法。

不能忽视的是构造SQL查询

  • 避免对BLOB数据执行WHERE子句
  • 尽可能多地将BLOB数据排除在临时表之外(可能需要重构查询)

根据这些事实,您必须将my.cnf配置为最大值的一个数字,以便单个MySQL数据包足够大以容纳多个BLOB。您还必须查看DB Server上是否有足够的可用RAM。否则,通过不断地将单个BLOB运入或移出数据包,大量处理BLOB将产生意想不到的性能瓶颈。

结论

一旦您有足够的可用内存、适当大小的MySQL数据包和避免将BLOB数据堆积在多个临时表中的查询,大多数注意事项/缺点都会相互抵消。

更新2011-09-09 12:23

另一个考虑是记住在mysqldump中使用--十六进制-blob选项。否则,它可能会使重新加载blob有点困难,这取决于某些字符序列。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/4892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档