【发布时间】:2014-11-01 05:24:31
【问题描述】:
我正在考虑跟踪每位用户的分数/分数。从我看到的例子来看,只跟踪一个字段中某些东西的总数似乎很正常。但是,我担心在作弊的情况下能够回溯或跟踪给予用户的分数/分数。以下是我的想法:
Meteor.User 集合:
Meteor.user.profile: {
...
totalScore: 0
...
}
场景 1: 只需添加总分并跟踪每个用户:
updateScore() {
var currentUser = Meteor.user();
currentUser.profile.update({ _id: this._id }{$inc: { totalScore: 1} });
}
场景 1: 先将分数放入单独的 Collection 中进行记录,然后再添加到用户的总分中:
分数收集:
Scores: {
playerId: ,
score: ,
...
}
updateScore() {
var currentUser = Meteor.user();
Scores.insert({ playerId: this._id, score: 1, ...});
currentUser.profile.update({ _id: this._id }{$inc: { totalScore: 1} });
//if not the above, then thisor this
var currentUserScore = Calculate total score count from Scores collection of current user here
Meteor.user.profile.update({ _id: this._id }{$set: { totalScore: currentUserScore} });
}
所以我想知道的是,场景 2 与场景 1 相比是否有意义?如果场景 2 有意义,如果我通过变量 currentUserScore 计算总分,然后使用它来更新用户的 totalScore 配置文件字段(每次需要更新分数时都会运行),这是否会损害应用程序的性能?
【问题讨论】:
-
关于问题参数的一些问题:如果玩家要作弊,他/她会怎么做?分数总是以 1 递增吗?显示分数历史是否有任何价值,或者您是否希望将其严格用于审计目的?分数增加有多常见(这像弹球还是像堆栈溢出)?
-
嗨,大卫,回答您的问题 1. 作弊或玩弄系统 - 不知道他们将如何做,但如果他们这样做,我认为交易历史可能会有用。 2. 至于分数总是加 1 - 这只是一个例子:)。 3. 可能想要更多地利用历史记录(例如,后端或前端查看器用于任何目的) 4. 可能类似于堆栈溢出。
-
我只是不确定我一直在阅读的这个 .aggregate() 函数是否会占用如此多的处理能力...我确实得出结论,为此类日志设置了一个单独的表有用(用于统计信息等) - 即使只是订阅日志以获取当前登录用户的数据。