在使用MySQL时,将图像作为BLOB存储在数据库中不是一个好主意,因为这会使数据库变得非常大,这不利于数据库的正常使用.然后,最好将图像文件保存在磁盘上,并在数据库中保存指向它们的链接.

然而,我认为这对于MongoDB是不同的,因为增加数据库文件大小对性能的影响可以忽略不计(这就是MongoDB能够成功处理数十亿条记录的原因).

您认为在MongoDB上保存图像文件(作为GridFS)以减少服务器上存储的文件数量更好吗;还是最好让数据库尽可能小?

推荐答案

问题不在于数据库变大,而是数据库可以处理(尽管MongoDB在这方面不如其他许多数据库好).问题是,要将数据发送到客户机,首先必须由数据库将其移动到RAM中,然后将其复制到应用程序的内存中,然后通过套接字发送到内核.这会浪费大量的RAM和CPU周期.文件系统中最好有大文件的原因是,复制它比较容易,您可以要求内核直接将文件从磁盘传输到套接字.

在文件系统中存储大文件的缺点是很难分发.使用数据库和Mongo的GridFS之类的东西使向外扩展成为可能.您只需确保不会一次将整个文件复制到应用程序的内存中,而是一次复制一块.如今,大多数Web应用框架都支持发送分块的HTTP响应.

Database相关问答推荐

Django Save 方法在try 向表中添加新记录时出错

在 SQL Server 中找出调用存储过程

如何将开发数据库更改移动到生产数据库?

某些网站不允许在密码中使用句点是否有原因?

ODBC 与 JDBC 与 ADO.NET

在 MySQL 中实现一对一关系时确定外键

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

将数据库表用作作业(job)队列的最佳方式是什么?

设计数据库时最重要的考虑因素是什么?

自动增量唯一标识符

为数据库应用程序留下审计跟踪/更改历史的有效策略?

什么时候用R,什么时候用SQL?

从 CSV 文件填充 Android 数据库?

如何从 PostgreSQL 数据库中的文本文件加载数据?

我在哪里可以获得所有国家/地区的邮政编码?

如何使用 django 判断 postgresql 数据库中是否存在某些内容?

在将字符串插入数据库期间单引号转义

如何在 SQL Server 中总结时间字段

SQLite3 数据库的最大连接数是多少?

使用 Django 的复合/复合主/唯一键