2011-07-27 34 views
0

我想獲得關於如何建模以下反饋:MySQL的可擴展數據模型

  • 兩個主要目標:收集和資源。
  • 每個用戶有多個集合。我不保存用戶信息本身:每個集合都有一個「用戶ID」字段。
  • 每個集合包含多個資源。
  • 任何給定的集合只屬於一個用戶。
  • 任何給定的資源可能與多個集合相關聯。

我致力於暫時使用MySQL,儘管可能會遷移到不同的數據庫中。我的主要擔憂是具有以下假設的可擴展性:

  • 用戶數大約爲200,並且會增長。
  • 平均而言,每個用戶有五個集合。
  • 關於三萬個新的獨特的資源「消耗」日報:當資源被消耗,應用程序關聯該資源到每一個集合,是有關該資源。假設一個資源通常與約一半的集合相關,因此每天插入30,000 x(1,000/2)= 15,000,000個插入。
  • 集合和資源對象都由大約六個字段組成,其中一些可能會達到100個字符的長度。
  • 每個用戶都會持續進行輪詢以定期檢索其集合和相關資源 - 假設這種情況每分鐘發生一次。

請記住,我使用MySQL。鑑於預期的數據量,數據模型應該如何規範化?將這些數據存儲在一張平坦的表格中有意義嗎?什麼樣的分片方法是合適的? MySQL的NDB集羣解決方案是否適合這種用例?

+0

「15,000,000插入」是一個巨大的變化。你真的是指「插入」?這是一個「主要插入」應用程序,主要是記錄事件? –

回答

1

鑑於數據的期望音量,如何標準化應數據模型是什麼?

完美。

您的卷很小。你每天做10,000到355,000交易?假設您的高峯使用時間爲12小時。這是.23 /秒高達8 /秒。直到你達到30 /秒的速度(在12小時內超過100萬行),你幾乎不用擔心。

難道是有意義的這個數據存儲在一個平坦的桌面?

什麼樣的拆分方法將是適當的?

無所謂。選擇一個讓你快樂的人。

您需要憑經驗測試這些。建立一個現實的假數據量。寫一些基準交易。在負載下運行以基準分片替代方案。

MySQL的NDB集羣解決方案是否符合此用例?

這是值得懷疑的。您通常可以創建一個足夠大的單個服務器來處理此負載。

這聽起來不像你的問題的任何要求。

MySQL集羣被設計爲不具有任何單點故障。在 一個無共享系統,每個組件預計有自己的 內存和磁盤,並不支持使用共享存儲機制,如 網絡共享,網絡文件系統和SANs或 支持。

+0

感謝您的反饋。我在原帖中沒有很清楚地解釋這一點,但我認爲每天交易量將超過10,000到355,000筆。假設每天有30,000個新來的資源。我們還假設每個資源通常與約一半的資源相關(1000/2 = 500)。所以每天插入30,000 x 500 = 15,000,000個。還會有大量的查詢:每個用戶都將持續輪詢查看其集合和相關資源。 – chunjef

+0

@connecticut:不要在評論中添加事實。請**更新**問題是完整和一致的。 –

+0

@connecticut即使有了這個添加,你仍然有關係,而不是記錄,它們被表示爲外鍵(有索引)。除非您將數據模型非規範化(不推薦),否則您沒有執行15M插入操作。 – mevdschee