使用mysql时,将图像作为BLOB存储在数据库中是一个坏主意,因为它会使数据库非常大,这对正常使用数据库是有害的.然后,最好将图像文件保存在磁盘上并保存数据库中的链接.
但是,我认为这与MongoDB不同,因为增加数据库文件大小对性能的影响可以忽略不计(这就是MongoDB可以成功处理数十亿条记录的原因).
您认为最好将图像文件保存在MongoDB(作为GridFS)以减少存储在服务器上的文件数量;或者最好保持数据库尽可能小?
解决方法:
问题不在于数据库变大,数据库可以处理(虽然MongoDB在这方面不如许多其他的好).问题是,要将数据发送到客户端,它首先必须由数据库移动到RAM中,然后复制到应用程序的内存中,然后传递给内核以通过套接字发送.它浪费了大量的RAM和CPU周期.在文件系统中拥有大文件最好的原因是它可以更容易地复制它,你可以要求内核直接将文件从磁盘流式传输到套接字.
在文件系统中存储大文件的缺点是分发起来要困难得多.使用数据库和Mongo的GridFS之类的东西可以扩展.您只需要确保不要立即将整个文件复制到应用程序的内存中,而是一次复制一个块.现在,大多数Web应用程序框架都支持发送分块HTTP响应.
标签:mysql,mongodb,file,database