我目前有一个使用 mongodb 作为数据库的社交游戏应用程序。我的问题是,如果我想创建一个积分和徽章系统,有哪些建议。成就/徽章的业务逻辑可能会变得非常复杂并且非常临时,因此实时授予徽章似乎效率不高。我想象将跟踪的操作添加到队列中的某处,即 Amazon SQS,或者仅使用用户的活动源作为队列,并让另一个离线工作进程执行并仅处理每个操作/活动的效果,以查看阈值是否为任何特定的徽章都会被划掉。
我对这种方法的担心是,徽章查询似乎会变得非常密集,而且我还必须跟踪大量的操作。我可以想象各种成就,比如为过去 4 周内每周获得第二名的人授予徽章,或者为在 50 个州中的每一个州都有朋友的人授予徽章……等等……
对于此类东西是否有更优雅或经过验证的方法?除了 mongo 之外,使用另一个数据库来获取成就/活动提要/排行榜是否有意义,创建 mongo/其他数据库混合环境?
Redis、Neo4J 或普通的旧式 SQL Server 等选择对于混合解决方案来说是不错的选择吗?我喜欢 Mongo,因此它将保留作为我们的主要数据库,但很想知道添加另一个数据库是否会有所帮助。
这是在数据库上运行 MapReduce 的良好候选者。您可以不那么定期地运行它们,使用它们来离线计算您想要的数据。
http://www.mongodb.org/display/DOCS/MapReduce http://www.mongodb.org/display/DOCS/MapReduce
您可以使用其他工具来执行此操作,但在您的摘要中,我看不到任何令人信服的理由来增加现阶段的复杂性。我会探索地图缩减,尝试一下,如果它不能满足您的需求,请扩展您的选择。但那时,您至少会发现具体的瓶颈(如果有的话)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)