请教,一年有10万张学生照片(每张10K以内),是放服务器目录还是数据库里边?

salecn 2018-09-09 10:23:20
  背景:做一套云端的管理系统,一年有10万张学生照片(每张10K以内),这照片应该是放在数据里边还是服务器目录里边? 放数据库里边影响速度读取麻烦,放服务器目录里边很容易被下载泄漏。
问题:请教前辈,你们一般是怎样做的啊?(如果放服务器目录里边,把照片文件名用一个16位的随机ID,可以防止下载吗?)
...全文
964 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ruoch 2018-09-15
  • 打赏
  • 举报
回复
服务器里面 常用方式
qq_37108946 2018-09-12
  • 打赏
  • 举报
回复
放在阿里云的oss里面吧
tianfang 2018-09-12
  • 打赏
  • 举报
回复
一定是文件服务器上 使用hash算法(如:md5 sha256 , uuid也可以)生成新的文件名。文件系统的目录有最大文件数(不是很老的文件系统几乎到不了),可以按文件名前/后几个字符创建子目录 数据库存储文件的相对路径
wrqlgd 2018-09-12
  • 打赏
  • 举报
回复
我们是放到一个不可直接访问的目录,使用特定的数据接口验证权限后由后端输出流数据。效率可能没有nginx加lua高
Howe~zZ 2018-09-12
  • 打赏
  • 举报
回复
建议放服务器目录中,表里面只需要存入图片相关名称,和大小还有路径就可以
  • 打赏
  • 举报
回复
文件字节里加些东西,不能成为真正的图片文件,只有你自己展示的时候处理了才能现实就可以了,放数据库里还是算了吧,你会发现存在硬盘容量里比数据表空间里占用量小
liulilittle 2018-09-11
  • 打赏
  • 举报
回复
做分布式的文件系统,单纯的依靠系统I/O后面随着文件或目录的数量逐渐增大访问的效率就会越来越慢, 关系型数据库进行存储的话定期的分表分区的话整体会好很多,但是基数上去了查询效率自然而言会降低, 此时就需要考虑一些更好的优化手段,同时介于现在的数据库访问适配器的设定【非异步】读取行为,那 么不太适合读取很大尺寸的文件,对服务器内存会有较大的影响,当然你可以尝试找到异步的客户端。 ------------------------- 一般的小型系统的情况文件系统I/O并非不可满足,数据库提供的效能是好很多但是带来的负面影响也足够 强烈,取决于具体的场景与业务设计目标,但,相对于的“分布式的文件服务器“相对于上面几类,显然会 是一个很不错的选择。
nayi_224 2018-09-11
  • 打赏
  • 举报
回复
我试过把照片存数据库,很蛋疼。
必须要把照片单独放在一张表中,否则效率会非常差。但是在一些特殊的业务下,这种表结构又会使逻辑变得很混乱。而且全量提取数据的时候也很麻烦。当然好处也是有的,很微不足道的好处。
zbdzjx 2018-09-11
  • 打赏
  • 举报
回复
建议放在目录中,文件名用uuid。
10万*10K=1G,放在数据库中也还好了,但表结构要设计好,不然会影响速度。
游北亮 2018-09-11
  • 打赏
  • 举报
回复
数据库存储数据, 文件系统存储文件, 让数据库做擅长的数据存储,让文件系统做擅长的文件存储吧! btw:大量的小文件考虑上云吧,不管是aws还是阿里的oss
不易易 2018-09-11
  • 打赏
  • 举报
回复
还是放在服务器目录吧,uuid。
xia_xd 2018-09-11
  • 打赏
  • 举报
回复
建议用数据库,小文件数和目录数越多,越来越慢。
闭包客 2018-09-11
  • 打赏
  • 举报
回复
这是很常见的需求,一般来说,放服务器里面,加上权限认证就行了。
xigua1102 2018-09-10
  • 打赏
  • 举报
回复
数据库放路径,目录放实际图片,这个是一般采用的办法
图片id用uuid试试,或者给图片增加一些权限限制吧
RockeyCui 2018-09-10
  • 打赏
  • 举报
回复
阿里云oss或者自己搭建文件服务器,至于安全问题,图片id都是随机生成的 不是连号应该没问题
Dan淡淡的心 2018-09-10
  • 打赏
  • 举报
回复
建议服务器目录 图片资源可以放在web-info下 只有本机可以访问
  • 打赏
  • 举报
回复
建议服务器目录吧,防止下载可以做签名验证 , 图片输出到前端时 在url中加签名参数。访问图片地址时可以用 nginx + lua 签名验证 。
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧