大量视频录像、语音和图片的场景下,选择 Redis 还是 MongoDB?
■ 来自社区交流,供大家参考
大量视频录像、语音和图片的场景下,是选择Redis,还是选择MongoDB?
背景:我们要开发一个平台,会涉及到大量的智能硬件,视频录像、语音记录、图片拍摄等,并且还会频繁的访问调用这些。对于数据存储,我们采用MySQL数据库。但是对于视频、语音、图片,我现在不确定选用Redis,还是MongoDB会好一些,长久考虑!目前的计划是,存储这些视频和语音,还要计算每个用户存储的这些视频、语音占用的空间,剩余的分配空间之类的。请教各位大咖,指点指导!
@刘诚杰 数据库管理员 平安城科:
首先否定redis,这只是一种缓存,而且数据量不能太大。
其次否定mongodb,因为mongodb主要还是存类json数据。gridfs只是针对小数据量的变通方案,不建议用在大量数据的情况下,否则不好维护。
这种大文件、碎文件建议用以下方案:
由于数据量大可能后期会用到分布式存储(块存储、对象存储看你需求),所以可以放在glusterfs、FastDFS、ceph等。如果数据量没那么大,就本地的(或者多台机器)的文件系统,如xfs即可。
然后把文件名、路径、创建修改时间、文件占用大小等放在mysql等数据库中。
占用空间和剩余空间可以直接在数据库中计算。
图片视频的缓存可以考虑cdn方案。
MongoDB的应用场景可以参考《MongoDB 应用场景、避坑事项与最佳实践》,三年前写的,有些老。简而言之适合大表字段频繁加字段,有存储list需求等。然后原生高可用(自动切换)和分布式架构 redis主要就是做数据缓存,比如秒杀、高并发场景,也可以用在数据的临时落地。支持高可用(主从+哨兵)和分布式(redis cluster)
@匿名:
视频录像、语音和图片这些数据不适合存redis 或 mogoDB里,建议存成文件,只把索引信息存储到MySQL就可以了,访问时通过CDN就可以了。
@bryan 软件架构设计师 金融研发:
这些都是一些非结构化数据,对这些资料的使用取决于实际业务场景。一种可行的方案是“mysql+hadoop”。在描述一个文件的时候,可以将其分为2部分,一部分是元数据的描述,比如业务交易号、流水号,文件在 hadoop 中的存储位置等,一部分是真正的文件,将其存储在 hadoop 中。
1)扩展性:hadoop 的架构可以实现横向扩展,相对比较容易。
2)数据管理:所在的业务数据都有一定的生命周期,可以将数据分为hot data,warm data, cold data。等业务超出生命周期后,进行数据归档和清理。从而保证系统数据不会被无限扩大。这些都是非常成熟的案例。
您对这个问题怎么看?欢迎点击阅读原文到该话题讨论页面,分享您的观点
*本公众号所发布内容仅代表作者观点,不代表社区立场