我正在構建簡單的Web應用程序,用戶可以投票。 什麼是檢查用戶是否已投票的最快方式。我感興趣的是兩個關係數據庫和基於文檔的數據庫(MongoDB的,...)獨特的投票,禁用revote
我有一些想法,但我相信他們可以改進:
關係數據庫
創建表決單獨的表:
|userid|articleid|
之前遞增文章投票檢查是否有既包括用戶名和條款ArticleID一行。我們有兩個疑問。有可能通過觸發器來改善這種情況嗎?例如:
|useridarticleid| unique column
投票之前在應用程序端生成useridarticleid。嘗試插入useridarticleid。如果字段是新的,觸發器將觸發,它將增加文章中的投票欄。
基於文檔
這是更棘手一點。因此,有文檔結構類似這樣:
{
"id": "123",
"content": "something",
"num_votes": 2,
"votes" : [
"userid1",
"userid2"
]
}
第一「查詢」 - 檢查,如果用戶ID是在投票數組。第二個「查詢」 - 如果不是,則增加num_votes。
再次兩個查詢。所以我認爲我們可以改變這一點,但我不知道它是否會提高性能:
插入投票數組中的userid。當用戶想檢查文章「計數」數組中的投票。但是我認爲這可能會降低性能,因爲如果流量很高,那麼每篇文章都有點浪費。在這裏想象一下Reddit。
我不認爲你需要關係數據庫案例的觸發器 - 只需在userid,articleid表上添加一個唯一約束,並且任何重複的插入操作都會失敗。 – 2012-07-15 19:53:51
它的悲傷我不能標記兩個答案。感謝你! – ewooycom 2012-07-15 20:50:08