实时查询大型mongodb集合
我们有一项服务,允许人们在其他人实时收听的同时打开房间播放YouTube歌曲 在MongoDB的其他收藏中,我们有一个用来存储用户添加到房间播放列表中的歌曲,它叫:userSong。 此集合保存为以下组合添加的所有歌曲的记录:user room song 代码在以下主要操作中频繁查询集合:实时查询大型mongodb集合,mongodb,mongoose,Mongodb,Mongoose,我们有一项服务,允许人们在其他人实时收听的同时打开房间播放YouTube歌曲 在MongoDB的其他收藏中,我们有一个用来存储用户添加到房间播放列表中的歌曲,它叫:userSong。 此集合保存为以下组合添加的所有歌曲的记录:user room song 代码在以下主要操作中频繁查询集合: 正在加载当前播放列表(具有普通条件的常规查找) 加载房间的随机歌曲(使用Mongo聚合FW) 加载室热门歌曲(使用Mongo聚合FW) 现在,这个表变得很大(+1m条记录),事情开始变得缓慢,AWS开始更频繁
mongotop
userSong集合使得CPU的高消耗主要集中在读取操作中
我们对集合索引做了一些修改,这有点帮助,但它仍然不是一个解决方案,我们需要找到其他方法来排列数据,使其呈指数增长
我们打算将userSong数据分割成一个低级别的分段,而不是按用户房间的歌曲来进行分割,通过收集系统中每个房间的用户歌曲来进行分割,这将缩短从数据库获取数据的时间,现在我们需要决定如何做:
{room:,userSongs:[{userSong1,userSong2,…,userSongN}]
,因此每个房间都有自己的文档,其中有一个子文档(数组),其中保存着这个房间的所有用户歌曲记录。这将解决前面的问题(创建无限的收藏),但使用Mongoose(我们的ODM)将非常困难(据我所知)我们不能为这种数据结构定义一个高级模式。而且这可能会使我们对子文档大小的限制达到16MB