在使用MySQL时,将图像作为BLOB存储在数据库中不是一个好主意,因为这会使数据库变得非常大,这不利于数据库的正常使用.然后,最好将图像文件保存在磁盘上,并在数据库中保存指向它们的链接.
然而,我认为这对于MongoDB是不同的,因为增加数据库文件大小对性能的影响可以忽略不计(这就是MongoDB能够成功处理数十亿条记录的原因).
您认为在MongoDB上保存图像文件(作为GridFS)以减少服务器上存储的文件数量更好吗;还是最好让数据库尽可能小?
在使用MySQL时,将图像作为BLOB存储在数据库中不是一个好主意,因为这会使数据库变得非常大,这不利于数据库的正常使用.然后,最好将图像文件保存在磁盘上,并在数据库中保存指向它们的链接.
然而,我认为这对于MongoDB是不同的,因为增加数据库文件大小对性能的影响可以忽略不计(这就是MongoDB能够成功处理数十亿条记录的原因).
您认为在MongoDB上保存图像文件(作为GridFS)以减少服务器上存储的文件数量更好吗;还是最好让数据库尽可能小?
问题不在于数据库变大,而是数据库可以处理(尽管MongoDB在这方面不如其他许多数据库好).问题是,要将数据发送到客户机,首先必须由数据库将其移动到RAM中,然后将其复制到应用程序的内存中,然后通过套接字发送到内核.这会浪费大量的RAM和CPU周期.文件系统中最好有大文件的原因是,复制它比较容易,您可以要求内核直接将文件从磁盘传输到套接字.
在文件系统中存储大文件的缺点是很难分发.使用数据库和Mongo的GridFS之类的东西使向外扩展成为可能.您只需确保不会一次将整个文件复制到应用程序的内存中,而是一次复制一块.如今,大多数Web应用框架都支持发送分块的HTTP响应.