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

4
我有点困惑 - 在数据库中存储二进制数据的好处是什么?是出于安全原因,还是有一些更复杂的动机我没看到的吗?谢谢您的时间。
3个回答

5

相对于什么?直接放在文件系统里吗?

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

  • 不符合ACID特性;

  • 如果可能在多台服务器上托管应用程序(例如负载平衡、故障转移),则必须想出某种共享文件存储方式,以避免后端不同步;

  • 只使用一个存储后端而不是两个可以简化部署。

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

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

  • 对于非常大的文件来说不太灵活;

  • 您不能免费高效地使用Web服务器来提供文件服务。


没错,确切地说就是数据库 vs 文件系统。谢谢你的回答。 - Arnthor

2

将任何东西存储在数据库中具有相同的优点:

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

我不明白为什么数据是文本还是二进制都没关系,因为数据库给你带来了很多好处。


2
我假设另一种选择是将二进制数据存储在文件中,并在相应记录的DB中仅存储文件名。这种方法的问题在于它不够一致:您的文件可能会发生任何事情,例如损坏或删除,而DBMS(在此情况下为MySQL)无法对其进行任何处理:它无法确保一致性,因为它对您的文件一无所知。另外,DBMS可以优化对数据的访问(它可以将其存储在内存中,而不是每次访问时都从磁盘读取),而基于文件的方法则需要等待查询完成,然后打开文件并从磁盘读取数据。这将极大地降低性能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接