The*_*heo 16
问题不在于数据库变大,数据库可以处理(虽然MongoDB在这方面不如许多其他的好).问题是,要将数据发送到客户端,它首先必须由数据库移动到RAM中,然后复制到应用程序的内存中,然后传递给内核以通过套接字发送.它浪费了大量的RAM和CPU周期.在文件系统中使用大文件更好的原因是它更容易复制它,你可以要求内核直接将文件从磁盘流式传输到套接字.
在文件系统中存储大文件的缺点是分发起来要困难得多.使用数据库和Mongo的GridFS之类的东西可以扩展.您只需要确保不要立即将整个文件复制到应用程序的内存中,而是一次复制一个块.现在,大多数Web应用程序框架都支持发送分块HTTP响应.
答案是肯定的.回到旧洞穴时代,服务器具有可更改的可变文件系统.在我们尝试扩展事物之前,这很棒.
Cave-people现在构建具有不可变部署的应用程序. Heroku和Dokku就是这样的例子.由于Web应用程序服务器没有状态,因此可以轻松地创建,升级,扩展和销毁它们.
既然我们还有文件,我们需要将它们放在某个地方.有几种解决方案:nfs,我们的数据库,别人的数据库.
nfs是一个'网络文件系统',它让你在网络资源上进行文件i/o.如果你正在处理网络,恕我直言,除非你已经知道,否则它不会增加太多价值.
我们的数据库 - 对于MongoDB,有两个选项 :(文件> 16mb)?GridFS:BinData
有人使用数据库 - 有些是基本的,如Amazon S3,有些提供额外的服务,如Cloudinary或Dropbox.
如果你是一个大预算的企业团队,每周花40小时照顾服务器,那么肯定 - 使用文件系统.如果您正在构建可扩展的Web应用程序,则将文件放入数据库是有意义的.
如果你担心表现:
1)使用代理(例如nginx)或CDN来托管客户的内容.您的服务器应该只是服务缓存未命中.
2)使用流式IO Nodeschool有一个很酷的Node.js教程.
| 归档时间: |
|
| 查看次数: |
9286 次 |
| 最近记录: |