我正在建立一个网站,它存储用户名,密码,用户图片。现在存储用户图片我有两种方法: -
方法-1)将图片保存在数据库表的每一行中。
方法-2)将所有图片保存在文件夹中,然后通过userid重命名图片名称(这样就不会有2张图片具有相同的名称),然后给出每张图片的位置地址 在数据库表的每一行中。
那么哪种方法更有效,为什么?
答案 0 :(得分:0)
效率可能意味着许多事情。在设计解决方案时,可维护性和可扩展性与纯性能同等重要。
方法2依赖于磁盘上的文件,这意味着在具有多个服务器的生产环境中(每个产品应该具有该服务器),您必须使解决方案中的所有服务器之间的文件保持同步。
您对问题的评论表明方法2更受欢迎。这可能是,但它更难扩展并保持同步。
方法1(将图片保存在数据库中)是可行的方法,因为它使它们与位置无关!但我会做出一个改变:将所有图片放在一个单独的表中!为什么?所有数据库都在IO页面中向磁盘读取/写入/搜索数据。通过保持User表小,您可以在该表上获得更好的查询性能。如果将图片添加到“用户”表格中,则从磁盘读取时,图片的大小会增加,同一页面上的页面也会更少。
确实,当您需要阅读图片时,这将意味着另一个查询,但由于图片几乎从不更改,您可以在分布式缓存中本地缓存它们以允许快速访问。
性能怎么样? 方法2可以被视为更快,因为您不需要从数据库中的磁盘读取图片,但仍然需要从本地服务器上的磁盘读取...所以实际上没有优势。但即使有一个优点,只要你的最常用图片被添加到缓存中,优势就会消失,那么使用方法1可能比方法2更快。