簡體   English   中英

如何處理一些事件發生多少次的計數?

[英]How to handle count of how many times some events occurs?

嘗試獲得處理“我喜歡”的書數的最佳實踐。 現在說,我有很多書,每個系列可以有很多書。 現在,當人們在一本書上單擊“我喜歡”時,我想在書上加1,然后在系列中加1,以便以后我可以相應地渲染這些數字。 現在,我在兩種方法上進行掙扎。

1)當單擊一本書時,我將在書籍表的“喜歡”列中添加1,同時在系列表的“喜歡”列中添加1。

2)單擊一本書時,我只在書表的“喜歡”列上添加1。 當我嘗試對系列編號進行渲染時,我對屬於該系列的書籍的“喜歡”列進行了SUM運算。

但是,兩者都有優點和缺點。 1)方法,當我嘗試顯示有多少人喜歡整個系列時,我可以簡單地獲取系列表的“喜歡”列。 這將比2)方式高效,因為不需要聚合,尤其是當許多人嘗試呈現系列頁面時。 但是,當我們單擊“我喜歡”按鈕時,這將需要更多的精力。 即使當人們單擊不同的書時,也會引起該問題。 只要這些書屬於同一系列,就需要更新該系列的編號。 而且它將是並發過程。 相反,如果人們單擊“我喜歡”這本書時,我不對系列表進行更新。 在那個級別上它會更高效,但是當許多人嘗試加載同一系列頁面時,將花費大量的精力進行冗余聚合計算,其中顯示了該系列的“喜歡”數字。

還有其他想法嗎? 如果沒有,有什么更好的解決方案? 1)或2)? 提前致謝。

使用HttpSession

HttpSession session = request.getSession(false);
if (session == null) {
    // store value in session
}
else {
    // read value from session
}

另一個選擇是將Redux用於較大的“單頁應用程序”,但前提是有意義。

我更喜歡第二種方法。 那里的邏輯更有意義。 不僅可以在每次單擊該書時在系列中加1,還可以對系列中的喜歡總數進行匯總。

將數據存儲在數據庫中,否則在服務器重新啟動時會丟失數據。

使用RDBMS時,您應該專注於數據完整性 如果沒有在單個事務中完成,第一種方法可能會引入更新異常。 無論如何,您在系列計數器上的並發性很高。 所以我更喜歡第二種方法。

僅當解決方案缺乏性能時,才從非規范化開始。

我建議使用數據庫。 您可以有一個books表和一個likes表。 當某人喜歡一本書時,您可以獲取他們喜歡的書的ID,並將其添加到Likes表中。

這樣,您還可以存儲喜歡的人的名字,並阻止他們喜歡兩次以上,並且還可以給他們選擇刪除喜歡的人的選項。 例如:

圖書表:

ID,書名,作者(以及其他任何信息)

點贊表:

ID,用戶名,book_id,日期

然后,當計算一本書的喜歡數量時,您可以查詢數據庫並計算book_id =?的行數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM