2010-03-10 110 views
0

我正在嘗試構建一個項目的mysql數據庫設計。問題在於提出最佳解決方案。基本上在我的應用程序中,我將不得不爲每個用戶插入大約10-30行。主鍵將是一個隨機的CHAR(16)字符串。還會有一個日期時間索引和一個稱爲「數據」的附加行(帶有索引)。數據庫設計

日常工作中,表格上只會有大量的插入和查找。查找將始終基於主鍵連接(因此每個用戶需要連接這10-30行)。

我有時需要能夠查看幾個特定月份(甚至全年),並在「數據」索引中使用mysql GROUP BY函數。

根據目前的數量和估計,我預計該表每月將增長9.3百萬行。我確實預計這會增加。

所以我的問題歸結爲:mysql分區,程序化表分隔或其他解決方案?並且是按月份或年份最好分開的東西?我們在RHEL上運行,因此獲得MySQL 5.1可能有點工作,但如果這是更好的解決方案,它可能是值得的。

已經爲此項目選擇了innoDB。主要關注日常表現。

回答

0

對日期的數據進行分區(也許還有用戶是每個用戶的數據,並且你有很多用戶)。

然後創建一個包含您需要的SUMCOUNTAVG等的月度表以及相應的分組。您也可以對該表進行分區(但日期可能不會是有意義的分區)

然後創建一個像月表一樣的年度表。

使用REPLACE INTO ... SELECT ...語句填充每月和每年的表格。

2

這不回答你的問題,但它需要被提到...

主鍵將是一個隨機的CHAR(16)的字符串。

這是一個壞主意。使用帶有AUTO_INCREMENT的UNSIGNED BIGINT列。不需要重新發明輪子:您不必擔心密鑰管理或碰撞。

+1

同意,如果按鍵不能自動遞增,您可以使用Hi-Lo密鑰生成算法。 – 2010-03-10 02:30:57

+0

我知道自動增量,但合併表與順序ID將是一個痛苦。 – jwzk 2010-03-10 03:35:17

+1

與「隨機」ID合併表將是一大痛苦,尤其是當有重複! – 2010-03-10 13:38:56