database-design - 如何使用 nosql 构建成就和徽章

标签 database-design mongodb neo4j achievements badge

我目前有一个使用 mongodb 作为数据库的社交游戏应用程序。我的问题是,如果我想创建积分和徽章系统,有什么建议。成就/徽章的业务逻辑可能会变得非常复杂并且非常临时,因此实时授予徽章似乎效率不高。我正在想象将跟踪的操作添加到某处的队列中,即 Amazon SQS,或者仅使用用户的事件提要作为队列,并让另一个离线工作进程通过并仅处理每个操作/事件的影响,以查看阈值是否为任何特定的徽章都会被划掉。

我对这种方法的担心是,徽章查询似乎会变得非常密集,而且我还必须跟踪大量的操作。我可以设想的成就包括诸如过去 4 周每周获得第二名的人的徽章,或者在 50 个州中的每一个州都有 friend 的人的徽章……等等……

对于这种类型的东西,是否有更优雅或久经考验的方法?除了 mongo 之外,为成就/事件提要/排行榜使用另一个数据库,创建 mongo/其他 db 混合环境是否有意义?

Redis、Neo4J 或只是普通的旧 SQL Server 等选择是否适合混合解决方案?我喜欢 Mongo,所以它将继续作为我们的主要数据库,但很想知道添加另一个数据库是否会有所帮助。

最佳答案

这是在数据库上运行 map reduce 的理想选择。您可以不定期地运行它们,将它们用于所需数据的离线计算。

http://www.mongodb.org/display/DOCS/MapReduce

您可以使用其他工具来执行此操作,但在您的总结中,我看不出在此阶段增加复杂性的任何令人信服的理由。我会探索 map reduce,尝试一下,如果它不能满足您的需求,请扩展您的选择。但在那个时候,你至少会发现具体的瓶颈,如果有的话。

关于database-design - 如何使用 nosql 构建成就和徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008820/

相关文章:

java - Neo4j 索引未找到节点

node.js - Neo4j Rest api 唯一性不起作用?

database - 如何将用户与Redis中的数据正确关联并根据日期字段触发更新

node.js - 如何为 GridFS 集合创建 Mongoose 模型?

java - Neo4j-Spring Data-如何避免嵌套属性成为 Neo4j 中的节点

javascript - 找不到类型为 '[object Object]' 的不同支持对象 'object', meteor 集合中出现错误

mongodb - 缓存 MongoDb 与 Next.js 10 TypeScript 项目的连接 - API 路由

node.js - NodeJS如何只在工作时间执行一个功能?

algorithm - 如何表示隐含关系?

database - 适用于多种数据排列的数据模型设计 (RDBMS)