sql - SQL 中的大文本和图像

标签 sql mysql sql-server

在 SQL 数据库中存储大量文本(例如 html 页面)是个好主意吗?还是将其作为 html 文件存储在文件系统中是更好的主意?

图像也是如此 - 将图像数据存储在数据库中是个好主意还是将它们放在磁盘上更好?

存储大量数据会导致性能问题吗?每种存储方法的优缺点是什么?

就数据大小而言,在这种情况下,我查看的是“几页”HTML 和图像大小小于 500kb 的区域(尽管可能小很多)。足以生成您的平均文章/博客条目/等规模的网页。

最佳答案

在数据库中存储二进制数据(文档、图像等)有一些优势。

  • 您可以在与要存储的有关文档的信息(姓名、日期等)相同的事务中提交文档本身的更新。这意味着您不必担心编写自己的两阶段提交(尽管 ISTR,SQL Server 2008 对此有解决方案)。

  • 您可以一次备份全部(文档和元数据),而不必担心必须将数据库与文件系统同步

  • 您可以通过 .NET Web 服务非常简单地交付文档,因为它们直接进入 DataTables,并且只需将 DataTables 放入 DataSet 并传递它就可以毫不费力地进行序列化。

  • 您可以对对象应用数据库安全性,就像对其余数据一样,而不必担心网络文件权限。

它也有一些缺点:

  • 备份可以变得非常大

  • 数据库中二进制对象的大小可能比它最初来自的文件大很多,因此在客户端-服务器环境中,它会增加通过网络打开它们所花费的时间.

  • 根据应用程序,如果数据库服务器必须提供大量大型文档,您可能需要考虑其负载。

总而言之,这是一种我广泛使用的技术,而且效果很好。

关于sql - SQL 中的大文本和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525690/

相关文章:

php - MongoDB 选择排序问题

sql - psql 从 table=# 更改为 table(#

php - 免费的 PHP 登录库

sql-server - 命名管道提供程序 : Could not open a connection to SQL Server [53]

sql - 多条记录的 SCOPE_IDENTITY

SQL Server 将表从一个数据库复制到另一个数据库

php - 给定用户名时,根据分数从无序的 MySql 数据库中获取排名

php - 在 PHP 中使用 UNIX 时间戳计算时差

mysql - 有什么方法可以在 MySQL 中执行 "insert or update as appropriate"吗?

SQL Server 在多个列上进行透视