为什么在MySQL中存储二进制数据?

时间:2011-04-25 12:37:05

标签: mysql database

我有点困惑 - 在DB中存储二进制数据的优点是什么?是出于安全原因,还是有一些我看不到的更复杂的动机?

感谢您的时间。

3 个答案:

答案 0 :(得分:4)

与什么相反?把它放在文件系统中?

使用文件系统进行二进制文件存储的缺点是:

  • 您没有获得ACID合规性;

  • 如果你可能在多个服务器上托管应用程序(例如负载平衡,故障转移),你必须计算出某种共享文件存储,以避免后端失去同步;

  • 只有一个存储后端而不是两个存储后端使部署更简单。

因此,对于仅限数据库的存储,您不必担心为Web用户创建具有写访问权限的文件夹,整个应用程序可以是只读的。如果需要移动应用程序,只需将其从源代码管理中检出并将其指向数据库,而无需复制更多文件数据。您的数据库备份可以涵盖所有内容,而不必具有单独的文件备份步骤。等等。

另一方面数据库BLOB存储的缺点:

  • 对于非常大的文件很笨重;

  • 您无法使用网络服务器免费有效地提供文件。

答案 1 :(得分:1)

将任何内容存储在数据库中的相同优点为您提供了

  • 您可以索引另一列或主键上的数据,从而快速检索数据
  • 可从一个位置访问,并为您处理行级并发问题
  • 可以适当缓存常用数据
  • 您可以微调用于存储数据的表引擎
  • 您可以建模二进制数据与其他表(用户/页面/其他)中的行之间的关系

我不明白为什么重要的是数据是文本或二进制,数据库给你带来了很多好处。

答案 2 :(得分:1)

我假设另一种方法是将二进制数据存储在一个文件中,并将文件名而不是数据存储在DB的相应记录中。这种方法的问题在于它不一致:任何事情都可能发生在您的文件中,它可能会被损坏或删除,而DBMS(在这种情况下是MySQL)无法对它做任何事情:它无法确保一致性,因为它确实不知道你的文件。另一方面,DBMS可以优化对数据的访问(它可以将其存储在内存中,而不是每次必须访问时都从磁盘读取),而使用基于文件的方法时,您必须等到查询完成后,打开文件并从磁盘读取数据。它会大大降低性能。