【发布时间】:2012-02-16 19:42:43
【问题描述】:
我正在尝试找出一种方法来记录用户的播放,而不会像 iTunes 一样减慢我的应用程序。
我的应用程序基本上是一个与 facebook 高度集成的音乐网站,facebook 用户可以登录并批准我的应用程序,然后开始听歌并制作自己的播放列表等。
应用程序是使用php 和mongodb 构建的。
我已经尝试添加此功能 2 次,但每种方法都有其自身的缺陷,我只是想看看你们“专业人士”的想法,因为我在构建应用程序方面只有 1 年的经验。
方法一
创建一个名为 plays 的集合,每个文档将如下所示。
{
"user" => "user mongoid",
"track" => "track mongoid"
}
方法一的问题
这个问题是它会很慢,因为当我显示艺术家页面时 我必须列出最近的 20 首曲目,然后在获取曲目时,我必须检查每个曲目当前用户收听了多少。
所以在获得曲目后,我必须这样做才能让当前用户播放:
// getting the tracks.
$cursor = $this->tracks->find();
$tracks = array();
foreach ($cursor as $t) {
// getting the number of plays.
$t['plays'] = $this->plays->find(array('user_id' => $user, 'track_id' => $t['_id']))->count();
$tracks[] = $t;
}
方法二。
在用户文档中嵌入播放。 这种方法看起来不错,而且速度非常快,当用户播放曲目时,只需添加或增加该曲目的曲目数量即可。 然后只显示它们。
这个方法的问题。 MongoDB 只允许 4 mb 的文档。我不能只推送用户文档中的所有内容。
我在网上到处寻找与 mongo 遇到类似问题的人,但我没有找到。
那么如何在不降低应用程序速度的情况下记录每个用户的播放次数?
【问题讨论】:
-
使用最新版本,文档大小限制为 16mb。