我想创建存在1周的排行榜。用户可以在1周后根据排名收集奖品。一旦奖金被收集,他们就会进入下一周的领导者竞选赛。
我有几个问题我无法找到解决方案,因为我对数据库结构,firebase和.indexOn缺乏了解。
我的第一次尝试是在创建排行榜的那一周创建嵌套数据,例如(mm,dd,yyyy)“highscores / 9,1,2017”将是一周,依此类推每个7天时间。我遇到的一个大问题是索引这些信息。我无法找到在Firebase控制台中编写规则的方法,以便在“highscore”/“random_data_string”/ [“score”]下对“得分”进行排序。经过很长一段时间的观察我相信答案是你不能排序嵌套值?这对我来说失败的另一个原因是,随着时间的推移,它会在“高分”下创造大量的入口点,并且无法在任何一个上使用索引最终将无法忍受的缓慢(自从手册说在数据增长时使用索引加速进程。
我的第二次尝试是创建两个引导板,分别在路径名末尾附加“01”和“02”,如下面的代码所示。这里的想法是与领导委员会来回跳转,因此用户花了几天时间签署并申请前一周的奖励有6天的时间。
public string FirebaseHighscoresPath(bool current)
{
if ( ( System.DateTime.Today.AddDays( DaysTilNextTournament() ).DayOfYear - 1 ) % 14 < 7 )
return current ? "highscores01" : "highscores02";
else
return current ? "highscores02" : "highscores01";
}
这是我的新问题源于此的地方。如何在时间到期之前删除前一个排行榜的条目,并且需要将其转换为“当前”排行榜?在过去,我有可以使用的服务器代码,但是使用firebase它是非常放手的。我需要一个需要客户端处理这些信息的解决方案。我不希望50个客户告诉firebase立即清除旧的排行榜。这肯定会导致数据损坏。我也不希望客户在前一天开始告诉前一个排行榜清除,因为如果那天我有1000个用户,那么排行榜可能会被告知要清除1000次。这感觉就像是浪费了大量的带宽和服务器周期。
最后,我想知道我是否以正确的方式解决这个问题。通过我过去一周所做的所有研究,试图完成这项工作后,我发现了一个Push()函数,它似乎具有按创建日期排序的功能。但这就是我能找到的信息。这一切的学习曲线非常高,而且我只是通过反复试验自学,所以我的方法是偶然学习的,或者是在网上写好的指南。