实时查询大型mongodb集合

实时查询大型mongodb集合,mongodb,mongoose,Mongodb,Mongoose,我们有一项服务,允许人们在其他人实时收听的同时打开房间播放YouTube歌曲 在MongoDB的其他收藏中,我们有一个用来存储用户添加到房间播放列表中的歌曲,它叫:userSong。 此集合保存为以下组合添加的所有歌曲的记录:user room song 代码在以下主要操作中频繁查询集合: 正在加载当前播放列表(具有普通条件的常规查找) 加载房间的随机歌曲(使用Mongo聚合FW) 加载室热门歌曲(使用Mongo聚合FW) 现在,这个表变得很大(+1m条记录),事情开始变得缓慢,AWS开始更频繁

我们有一项服务,允许人们在其他人实时收听的同时打开房间播放YouTube歌曲

在MongoDB的其他收藏中,我们有一个用来存储用户添加到房间播放列表中的歌曲,它叫:userSong。 此集合保存为以下组合添加的所有歌曲的记录:user room song

代码在以下主要操作中频繁查询集合:

  • 正在加载当前播放列表(具有普通条件的常规查找)
  • 加载房间的随机歌曲(使用Mongo聚合FW)
  • 加载室热门歌曲(使用Mongo聚合FW)
  • 现在,这个表变得很大(+1m条记录),事情开始变得缓慢,AWS开始更频繁地向我们发送CPU利用率通知,然后是
    mongotop
    userSong集合使得CPU的高消耗主要集中在读取操作中

    我们对集合索引做了一些修改,这有点帮助,但它仍然不是一个解决方案,我们需要找到其他方法来排列数据,使其呈指数增长

    我们打算将userSong数据分割成一个低级别的分段,而不是按用户房间的歌曲来进行分割,通过收集系统中每个房间的用户歌曲来进行分割,这将缩短从数据库获取数据的时间,现在我们需要决定如何做:

  • 为每个房间(roomUserSong)创建一个新的集合,该集合将保存特定房间的所有用户歌曲记录。这可能有助于快速获取,但会在数据库中创建无限的新集合(roomusersong-1、roomusersong-2、…、roomusersong-n),我们不知道这在实践中是否是一个好方法,或者这种解决方案中是否存在其他Mongo限制
  • 使用以下字段在数据库中再创建一个集合:
    {room:,userSongs:[{userSong1,userSong2,…,userSongN}]
    ,因此每个房间都有自己的文档,其中有一个子文档(数组),其中保存着这个房间的所有用户歌曲记录。这将解决前面的问题(创建无限的收藏),但使用Mongoose(我们的ODM)将非常困难(据我所知)我们不能为这种数据结构定义一个高级模式。而且这可能会使我们对子文档大小的限制达到16MB
  • 很高兴能从那些有Mongo经验的人那里听到一些建议:

    < LI>是+1M真的被认为是大的并且应该使这个CPU利用问题?(使用AWS M3媒体,一个核心)
  • 从引入的解决方案来看,更好的解决方案是什么
  • 有没有其他方法可以在不改变太多代码的情况下实现智能缓存
  • 谢谢你的帮助