1

的表現我創建了具有以下表用戶活動的數據庫:如何測試數據庫

user_id  | INTEGER | user being notified 
actor_id  | INTEGER | user performing the action 
activity_type | STRING | classname/type of the object being notified 
activity_id | INTEGER | id of the object being notified 
context_type | STRING | classname/type of the object's parent 
context_id  | INTEGER | id of the object's parent 
read/view_at | DATETIME | timestamp of when user saw it 

我不知道這樣的設計在性能方面不錯。所以我想以某種方式測試它。 我可以使用大量數據填充數據庫並打開頁面,我需要從此表中獲取數據,但是我不知道這是否是相關測試。

當Feed表中有10.000個用戶和50.000.000記錄時,有沒有一種很好的方法可以看到這種設計將如何執行?

我不知道這是否可以幫助,但這個我使用MS SQL Server

+2

建立它;測量它; **然後**調整它。 –

+0

這意味着將此設計投入生產。但是如果我獲得了50.000.000個活動,並且我發現用戶由於數據庫緩慢無法打開頁面,該怎麼辦?我需要確保這種活動設計能夠奏效。 – 1110

+1

什麼是您的硬件?你用SSD嗎?你的指數是什麼?是否/您可以設計模式綁定視圖來緩存聚合?你的FK是什麼?我只開始提出解決您的問題所需的相關問題。 **只要建立一個3NF設計**並解決實際存在問題時的性能問題。 –

回答

0

關於性能,沒有假設是安全的。您應該按照下列步驟操作:

  • 定義有關負載和響應時間的性能目標。您應該確定接受的特定數據加載的響應時間。

  • 定義資源。並非每個機器配置都會表現相同。您應該使用目標配置構建虛擬Maching。

  • 執行load testing。你可以通過使用諸如SQL Server load generator之類的工具來完成。

希望我幫了忙!

0

這爲我工作至今:

  1. 找出一套,如果是性能的關鍵查詢。
  2. 設計數據庫,以便DBMS可以針對上述查詢使用快速執行計劃。
  3. 裝滿代表性的測試數據的數據庫,並確保真正使用上述預期的查詢執行計劃(和每一個人查詢的性能是令人滿意的)。
  4. 基準軟件的整個「垂直堆棧」。到現在爲止,不應該有太多不好的驚喜。

正如您所看到的,數據庫設計不僅僅是滿足業務需求。事實上,瞭解客戶打算如何訪問數據是設計過程的組成部分。

換句話說,傳統上認爲「邏輯設計」是不夠的 - 在邏輯和物理設計之間需要有一個「雙向街道」。

當飼料表中有10.000個用戶和50.000.000條記錄時,有沒有一種很好的方法可以看到這種設計將如何執行?

該句子沒有包含足夠的信息來回答。

首先告訴使用你打算如何訪問數據,然後我們可以幫助你(重新)設計數據庫以有效地支持特定的訪問模式。


例如,如果「加載頁面」是用於用戶體驗(這通常是這樣)關鍵的,使得,將通常在該過程中被執行的查詢的列表。

其中包括「物理」技術,如索引,集羣,分區等,而且還可以包括某些方面是傳統的,雖然「邏輯」的設計,如鑰匙和關係的設計。如果您瞭解典型DBMS使用的基礎數據結構,則可以預測大部分設計決策的性能結果。 Use The Index, Luke!是一個很好的介紹。

+0

基於模式,我需要獲取感興趣特定用戶的所有記錄。因此,這將是簡單的'選擇頂部10 *從活動where user_id = 123 order by read/view_at desc'。我認爲,因爲我在這裏擁有所有的ID來基於類型使用連接到不同的表格,但我認爲這會使我成爲一個問題,所以我決定在該表格中保留儘可能多的數據。我知道這個denormalize數據庫,但找不到更好的方法來做到這一點。 – 1110