我正在将大文件(~200mb)直接保存到db中
我对此有疑问。
当文件保存到db时,在舞台上大量使用可用RAM(大约3gb ram和3gb交换)会导致:
@job.pdf = params[:job][:pdf].read
完成此操作后,仍有一些RAM和交换使用
有没有办法优化呢?
附: project on rails 3.0.3,使用mysql,在mogrel上运行。
答案 0 :(得分:2)
在MySQL中,为了能够保存或读取大小超过1MB的BLOB字段,必须将服务器端参数max_allowed_packet增加到大于默认值。在实践中,此参数不能超过16-32MB。这种增加的代价是每个新的数据库客户端将至少消耗尽可能多的内存,并且通常,服务器性能将大大受损。
换句话说,MySQL并不真正支持将大于1MB的BLOB字段(如果你不能或不想使用服务器配置)处理到大约16MB(即使你确实想这样做)。 / p>
这可能是一个哲学问题 - 在数据库中保留大blob是不是好主意?我认为对于许多任务(但并非对所有人来说)都是好主意,并且因为MySQL(以及其他原因)我非常糟糕,我只是避免将它用作我的SQL服务器解决方案。
相反,我使用PostgreSQL,它完美支持BLOB(实际上是BYTEA)广告限制为4GB,而无需在客户端或服务器上进行任何调整。除此之外,它实际上将使用LZ算法透明地压缩它们 - 比gzip略差,但仍然比没有压缩好得多。