我正在将大文件(〜200mb)直接保存到数据库中。
我对此有疑问。
当文件保存到db时,由于舞台上大量使用可用RAM(大约3gb的ram和3gb的交换)导致:
@job.pdf = params[:job][:pdf].read
完成此操作后,仍有一些RAM和交换空间正在使用中。
有什么办法可以优化吗?
ps。在Rails 3.0.3上的项目,使用mysql,在mogrel上运行。
最佳答案
在MySQL中,要能够保存或读取大小超过1MB的BLOB字段,必须将服务器端参数max_allowed_packet增大为大于默认值。实际上,此参数不能超过16-32MB。这种增加的代价是,每个新的数据库客户端将至少消耗相同数量的内存,并且通常,服务器性能将受到极大影响。
换句话说,MySQL确实不支持处理大于1MB(如果您不能或不想摆弄服务器配置)到大约16MB(即使您确实愿意这样做)的BLOB字段。
这可能是一个哲学问题-在数据库中保留大量斑点是个好主意吗?我认为对于很多任务(但不是全部)来说,这是个好主意,并且由于MySQL太糟糕了(出于其他原因),我只是避免将其用作我的SQL Server解决方案。
取而代之的是,我使用PostgreSQL,它完全支持BLOB(实际上是BYTEA),广告级限制为4GB,而无需对客户端或服务器进行任何调整。除此之外,它实际上会使用LZ算法透明地压缩它们-稍逊于gzip,但比根本没有压缩要好得多。