设计Firebase模式以查询趋势帖子



我正在使用firebase作为博客网站的后端数据库。我想知道我如何构建我的firebase db;基于我可以确定哪些帖子最近最趋势。

以下示例。


帖子
  - [帖子1]
        | -postid:Post1
        | -postname:旧
        | -postlikes:100
        | -postCreatedTimestamp:1483107180599
        | -postCreatedDate:20141204/* yyyymmdd格式的日期格式 */
- [帖子2]
        | -postid:post2
        | -postname:新
        | -postlikes:40
        | -postCreatedTimestamp:1483115276906
        | -postCreatedDate:20161204

按照上述示例,我们可以看到,即使Post 2的赞成数量较少,目前趋势趋势,因为它在较小的时间内获得了更多的喜欢。

我还找到了临时解决方案。通过创建类似系数。
likeCoeffitic =(((不喜欢)*10000000)/(最近likedTimestamp- createTimestamp)。
这种方法有错误。如果趋势帖子停止获得喜欢。我无法更新系数。因此,旧帖子也可以介于两者之间。(我不想使用后端服务器:)。它将增加我在这个阶段不想要的成本)。
[对数学演出的问题:]我们可以通过创建的时间戳来改进likeCoeff的效果,以表示最新的趋势帖子顺序。

@firebaseteam:为什么我们不能有两个订单byChild参数。为什么团队为什么.. :( :(

您需要第三个数据结构才能正确支持趋势。趋势算法几乎总是"指数移动平均"(EMAS)。尽管这不是他们的唯一目的,但它们通常用于股票交易,您可以在此处找到解释和公式:

http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages

本质上,您要做的是维护评分元素的列表。您可能只有一个组件要考虑将项目"趋势"(例如要发布的评论),在这种情况下,每个项目的分数仅为1.0。但是,您也可以做一些聪明的事情,例如说"最高回复价值1.0,第二级答复价值为0.5"。您可以在这些算法中包含任何想要的内容 - 评论,答复,星级或投票,大拇指,股票等。

弄清楚您要如何权重或分数,并创建将这些分数条目添加到数据集中的代码。在每个条目中,您都可能需要存储有关创建它的用户,执行什么操作,该动作的分数以及DateTime(以毫秒为单位)的信息。

从那里,您只需应用EMA公式即可为每个帖子创建一个总体加权分数。关于EMA的一件非常好的事情是,尽管您想记住分数中所有条目的列表以供以后参考,但并非必须查询它们以调整每个新值的EMA。可以使用上面链接中的公式从手头的数据中计算出EMA。而且由于EMAS偏好"较新"数据,因此它们会自动指示趋势项目,因为较旧的项目下降。

您将需要一种随着时间的推移维护这些值的方法,通常是背景/批处理过程,有助于有助于到期旧项目。另外,批处理过程可以计算当前的趋势项目,并将其发布到可以立即显示的/trending-posts集合中。此选项是我的个人喜好,YMMV。

最新更新