2017-01-01 102 views
-1

我正在將Firebase用作博客站點的後端數據庫。我想知道如何構建我的Firebase DB;基於哪個我可以確定哪些帖子是最近趨勢最熱門的。設計Firebase架構以查詢趨勢帖子

讓我們看看下面的例子。


帖子
  - [發佈1]
                | -PostId:POST1
                | -PostName:OLD
         個      | -PostLikes:100
                | -PostCreatedTimeStamp:1483107180599
                | -PostCreatedDate:20141204/*日期以YYYYMMDD格式格式*/
- [Post 2]
              | -PostId:POST2
                | -PostName:NEW
                | -PostLikes:40
                | -PostCreatedTimeStamp: 1483115276906
                | -PostCreatedDate:20161204

按照上面的例子中,我們可以看到,即使張貼了2少得了它目前的趨勢喜歡的數字,因爲它得到了越來越號碼喜歡在很短的時間內。 我們如何在此基礎上構建我們的Firebase。

我也找到了一個臨時解決方案。通過創建一個Like係數。
LikeCoefficient =((no of likes)* 10000000)/(RecentlylikedTimeStamp- createdTimestamp)。
這種方法存在缺陷。如果趨勢帖子停止獲得喜歡。我無法更新系數。因此,舊帖子也可以進入(我不想使用後端服務器:)。這會增加我在這個階段不想要的成本)。
[數學問題:]我們可以通過創建時間戳來提高LikeCoefficient,以表示最近的趨勢發佈順序。

@FireBaseteam:爲什麼我們不能有兩個ord​​erbychild params。爲什麼團隊爲什麼.. :(:(

回答

0

您需要第三個數據結構來支持正常的趨勢。趨勢算法幾乎總是「指數移動平均線」(EMAS)。雖然這不是他們的唯一目的,他們通常使用在股票交易,你可以找到的解釋和公式這裏:

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

基本上你想要做的是保持得分的元素列表你可能只有一個組成部分來考慮,使項目「。趨勢「,比如發佈評論,在這種情況下,每個項目的評分都是1.0,但你也可以做一些聰明的事情,比如說」頂級回覆值1.0,二級答覆值0.5「。您可以加入這些算法想要的東西 - 評論,回覆,星級評定或投票,豎起大拇指,股份等

弄清楚你如何想的重量或得分的,並創建代碼,增加了這些得分項到數據集的時候。在每個條目中,您可能需要存儲有關創建它的用戶的信息,正在執行的操作,該操作的分數以及發生的日期時間(以毫秒爲單位)。

從那裏,您只需應用EMA公式來爲每個帖子創建一個總體加權分數。關於EMA的一個非常好的事情是,雖然您想記住分數中所有條目的列表供以後參考,但沒有必要全部查詢它們以調整每個新值的EMA。可以使用上面鏈接中的公式計算EMA。而且由於EMA喜歡「較新」的數據,它們會自動顯示趨勢項目,因爲較舊的項目會丟失。

您將需要一種方法來保持這些值隨着時間的推移,通常是幫助過期舊項目的後臺/批處理過程。或者,批處理可以計算CURRENT趨勢項目,並將其發佈到可以立即顯示的/trending-posts集合。這個選項是我個人的偏好,YMMV。

+0

如果您使用EMA,則需要每日更新所有EMA值,以使它們保持最新狀態。 – MJQZ1347