Php 用哪种方法在MYSQL数据库中保存用户图片?

Php 用哪种方法在MYSQL数据库中保存用户图片?,php,mysql,database,Php,Mysql,Database,我正在制作一个网站,它存储用户名,密码,用户图片。现在要存储用户图片,我有两种方法:- 方法-1)将图片保存在数据库表的每一行中 方法2)将所有图片保存在一个文件夹中,然后按userid重命名图片名称(这样就没有两张图片具有相同的名称),然后给出每张图片的位置地址 在数据库表的每一行中 那么,哪种方法更有效?为什么?效率可能意味着很多事情。在设计解决方案时,可维护性和可伸缩性与纯性能一样重要 方法2依赖于磁盘上的文件,这意味着在具有多台服务器(每个prod env都应该有)的生产环境中,您必须在

我正在制作一个网站,它存储用户名,密码,用户图片。现在要存储用户图片,我有两种方法:-

方法-1)将图片保存在数据库表的每一行中

方法2)将所有图片保存在一个文件夹中,然后按userid重命名图片名称(这样就没有两张图片具有相同的名称),然后给出每张图片的位置地址 在数据库表的每一行中


那么,哪种方法更有效?为什么?效率可能意味着很多事情。在设计解决方案时,可维护性和可伸缩性与纯性能一样重要

方法2依赖于磁盘上的文件,这意味着在具有多台服务器(每个prod env都应该有)的生产环境中,您必须在解决方案中的所有服务器之间保持文件同步

你的问题得到的评论说方法2更受欢迎。也许是这样,但更难扩展和保持同步

方法1(将图片保存在数据库中)是一种方法,因为它使图片与位置无关!但我要做一个改变:把所有的图片放在一张单独的桌子上!为什么?所有数据库都将IO页面中的数据读/写/搜索到磁盘。通过保持用户表较小,可以在该表上获得更好的查询性能。如果您将图片添加到用户表中,它的大小将增大,从磁盘读取时,同一页上容纳的页面将减少

确实,当您需要读取图片时,它将意味着另一个查询,但由于图片几乎永远不会更改,您可以在本地或分布式缓存中缓存它们,以允许快速访问

性能如何?
方法2的速度更快,因为您不需要从数据库上的磁盘读取图片,但它仍然需要从本地服务器上的磁盘读取。。。所以这真的没有优势。但是,即使有一个优势,即一旦将最频繁的图片添加到缓存中,优势就会消失,那么使用方法1可能比方法2更快

方法2是你的答案。方法一,我不知道你们是怎么把图片保存在数据库里的。也许这就是让任何人投你反对票的原因。方法2更受欢迎。我不会评论效率,因为这对不同的人意味着不同的事情,除了说如果图像很小(约小于100 k),方法1可能优于方法2。在方法1中,我可以这样保存图片:-我们可以直接按BLOB数据类型存储每行中的图像。