【问题标题】:Why Isn't MySQL Blob Recommended为什么不推荐 MySQL Blob
【发布时间】:2017-02-21 11:50:57
【问题描述】:

我正在考虑整理一份我想在线展示的小杂志,并认为这样做的一个好方法是有一个包含 ID 号的表格,加上 blob 数据,以将每个页面显示为图片。

所以如果我有一个包含 10 页的问题,它看起来像:

ID . Page_1_Blob . Page_2_Blob . Page_3_Blob . Page_4_Blob . Page_5_Blob . etc

问题是,在存储图像的 blob 数据时,我看到了很多消极情绪,更具体地说,是因为它会减慢数据库的速度?这有多真实?是否有任何支持以这种方式使用 blob 数据的论据?

【问题讨论】:

  • 是否有充分的理由只提供杂志每一页的图片而不是指向正确 HTML 文档的链接?每次你写一个新的时候,你都会破坏上一期吗?
  • 也许“杂志”这个词用错了。它更像是一本小册子,人们可以在其中以逐页小册子的形式在线查看,然后以 PDF 格式下载实际文件。

标签: mysql database blob


【解决方案1】:

所以我的理解是 BLOB 存储在实际的数据库文件中。因此,如果您有一个 10GB 的杂志,那么 10GB 最终会出现在实际的 SQL 数据库文件中。当您进行查询时,该文件会加载到 RAM 中。显然,搜索一个 10MB 的文件比加载和搜索一个 10GB 的文件要快得多。答案是使用 SqlFilestream 将信息存储在服务器的实际文件结构中,但这会导致各种问题,因为 SqlFilestream API 仅适用于实际机器,而不是远程机器。对于我的数据库,我必须设置一个 WCF 程序来将大文件添加到我的数据库中。

如果你只有一个 10 页的数据库,那么一定要坚持在 BLOB 中,但是如果你在杂志之后添加杂志,那么它会导致速度变慢。

如果您尝试执行“从杂志中选择 *”之类的查询,那么这些查询将永远持续下去,因为它实际上会从服务器返回二进制数据作为查询的一部分。如果您对视频运行这种查询,那么您将等待很长时间。

【讨论】:

  • 我找不到任何表明 MySql 具有 SqlFilestream 类型的文档。
  • 抱歉,我以为您使用的是 Microsoft SQL。标题有点误导。目前我认为你被 BLOB 困住了。
  • 老实说,我可能会选择page_2_blob FROM magazines WHERE id = X,因为每个杂志页面都将托管在自己的网页上,即website.com/issues.php?issue=1&page=2。我只是不确定从大型数据库中选择 BLOB 与选择大型 TEXT 文章有何不同。
  • 一切都与大小有关。一个 BLOB 可能超过 100GB,而您永远不可能有这么大的文本块。如果您的 BLOB 总共为 1MB,那么它根本不会影响您的数据库。当人们发疯并开始输入大量信息时,问题就会出现,而这正是某些人会做的事情。
  • @ChristopherVickers 你知道根据图像计算 BLOB 大小的任何方法吗?正如它所暗示的那样,每一页都将是一张纸的大小——很可能是 A5。
猜你喜欢
  • 2011-07-14
  • 2011-07-03
  • 2012-05-31
  • 1970-01-01
  • 2016-02-23
  • 2017-11-04
  • 2011-10-22
  • 2011-04-11
  • 2021-10-12
相关资源
最近更新 更多