2017-07-02 111 views
2

我的基本表格包含200萬條30列用戶的記錄。SQL - 2M以內的潛在100K記錄。設計數據庫的最佳方法

偶爾會有一個新的活動開放供潛在的100K用戶參與(每個活動的不同組別)。 每個用戶都會進行一次自我認證,他/她的活動數據將被保存以供進一步使用。

什麼是設計數據庫的最佳方法?

  1. 複製100K與從基表中的所有要求和需要的細節Users_In_Activity表。將爲每條記錄創建一個新的PK(Users_In_Activity主鍵)。

    • 在這個方法中,將有來自只的記錄100K表和用於將一個PK(Users_In_Activity)進行記錄搜索 之間沒有接縫。
  2. 將100K用戶基本認證細節複製到Potential_Users_In_Activity表中。一個新的PK將被創建(包括用戶PK)並且將創建一個新的User_In_activity PK。

    • 對於每次成功的身份驗證,將在Actual_Users_In_Activity表中創建完整記錄。
    • 搜索記錄將由一個PK(Users_In_Activity)從僅100K的記錄中完成。在該方法中,爲2與一種PK(Users_In_Activity)提交之間加入
  3. 對於每個成功的認證

  4. ,一個完整的記錄將在Actual_Users_In_Activity表被創建。

    • 在這種方法中沒有連接,但搜索將會從所有200萬條記錄中搜索。

綜述:

方法1:創建100K 30列記錄。從100K條記錄中搜索,無需在活動期間創建新記錄。不需要連接。只有一張桌子可以使用。

方法2:創建5列100K。從100K條記錄中搜索。在活動期間創建新記錄(30列)(僅限活動用戶)。加入是必要的。 2表與

一起使用方法3:從2M條記錄中搜索。在活動期間創建新記錄(30列)(僅限活動用戶)。 2表進行

+0

你期望什麼樣的流量? R/W比率。 – iddqd

+0

爲什麼你需要複製這30列?重複數據通常不是一個好主意。 –

+0

@AntonínLejsek不是。在當今的標準中重複數據以進行有效的查詢是一個好主意。 –

回答

2

工作,你沒有討論的基本設計,

用戶表= 2萬人次的紀錄,USERID是PK.This表只包含用戶的詳細信息。

活動表=活動詳細信息,ACtivityID是PK(與用戶表在此無關)。此表包含每當創建新活動時的活動詳細信息。

User_Activity_Mapping = ActivityID,USERID(此處複製100K個用戶):這是用戶活動關係表。

通過適當的索引它將工作正常。

讓我知道

+0

用戶 - 活動關係表將在一段時間內變得巨大。在2M內搜索用戶不是合乎邏輯的,而是根據活動參與者的實際數量預先插入(或更新)? –

+0

@YanivBenYohana,好吧,我的疑惑,當活動是第一次分配給10萬用戶之前,他們知道作爲潛在的用戶,但當他們實際驗證後,他們成爲實際USER.Is潛在用戶臨時?一旦活動結束後,發生了什麼那些記錄。你會保留潛在用戶的歷史嗎?解釋我錯過的任何其他事情。 – KumarHarsh

+0

該活動包括向所有100K發送消息,並且需要保存歷史記錄(少量列)。除此之外,如果用戶實際參與(響應邀請),則需要記錄超過20個不同的數據。 –

相關問題