背景:我们要开发一个平台,会涉及到大量的智能硬件,视频录像、语音记录、图片拍摄等,并且还会频繁的访问调用这些。对于数据存储,我们采用MySQL数据库。但是对于视频、语音、图片,我现在不确定选用Redis,还是MongoDB会好一些,长久考虑!目前的计划是,存储这些视频和语音,还要计算每个用户存储的这些视频、语音占用的空间,剩余的分配空间之类的。请教各位大咖,指点指导!
首先否定redis,这只是一种缓存,而且数据量不能太大
其次否定mongodb,因为mongodb主要还是存类json数据。gridfs只是针对小数据量的变通方案,不建议用在大量数据的情况下,否则不好维护。
这种大文件、碎文件建议用以下方案:
由于数据量大可能后期会用到分布式存储(块存储、对象存储看你需求),所以可以放在glusterfs、FastDFS、ceph等。如果数据量没那么大,就本地的(或者多台机器)的文件系统,如xfs即可
然后把文件名、路径、创建修改时间、文件占用大小等放在mysql等数据库中
占用空间和剩余空间可以直接在数据库中计算
图片视频的缓存可以考虑cdn方案
收起这些都是一些非结构化数据,对这些资料的使用取决于实际业务场景。一种可行的方案是“mysql+hadoop”。在描述一个文件的时候,可以将其分为2部分,一部分是元数据的描述,比如业务交易号、流水号,文件在 hadoop 中的存储位置等,一部分是真正的文件,将其存储在 hadoop 中。
1)扩展性:hadoop 的架构可以实现横向扩展,相对比较容易。
2)数据管理:所在的业务数据都有一定的生命周期,可以将数据分为hot data,warm data, cold data。等业务超出生命周期后,进行数据归档和清理。从而保证系统数据不会被无限扩大。这些都是非常成熟的案例。
视频录像、语音和图片这些数据不适合存redis 或 mogoDB里,建议存成文件,只把索引信息存储到MySQL就可以了,访问时通过CDN就可以了。
收起mongodb+hadoop:
首先,Mongodb最适合存的nosql类型是诸如json、html,视频、图片这些东西就是hadoop的专长了。
可选mongodb做链接路由用,轻量快速,hadoop存放视频、语音、图片。通过hadoop存放视频、语音、图片的实践非常多,基本上各大银行的影像类都是如此,不同的是链接路由这块一般是采用oracle或者mysql