我的工作目前僅對所有數據存儲使用MySQL(MyISAM)。我們目前擁有300多個網絡服務器和大約150個數據庫。不幸的是,我不得不在30天內編寫一個表結構來支持超過1億行。我們的想法是:MySQL合併表 - 高流量和大量數據
- 大批量插入(沒有更新或刪除,並總是在表的末尾)
- 1行選擇
- 數據超過30天扔掉
最好的解決方案似乎是將每天的表格合併到選擇的合併表格中。確實會有重複的數據,但是SELECT只會根據時間戳和int字段來拉取最近的行。顯然,有30張桌子並不理想,但如此生活。
這種方法是否存在固有缺陷?有沒有其他方法可以解決這個問題(我們被困在5.0)?在創建新的一天表時,在合併表上執行ALTER TABLE時,表鎖定會成爲一個大問題?我們目前有一個表格旋轉結構,但如果我們選擇一個表格來選擇我們希望從舊錶格到新表格的數據,那麼到達1億行時,這個數據將非常緩慢。
還有其他技術可以以優雅的方式實現這一點,但我們的銷售團隊已經出售瞭解決方案,而且我們沒有時間的奢侈。
任何輸入,將不勝感激。
結構:
CREATE TABLE `merge_test_1` (
`date_stamp` long NOT NULL,
`hash` char(32) NOT NULL,
`p_id` mediumint(8) unsigned NOT NULL,
`a_id` mediumint(8) unsigned NOT NULL,
`b_id` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`hash`,`p_id`,`date_stamp`)
) ENGINE=MyISAM
查詢例如
SELECT b_id,a_id FROM merge_test WHERE hash='1' AND p_id=1
ORDER BY date_stamp DESC LIMIT 1
我應該說我們的DBA組嚴重限制了我們可以做的事情並且不支持視圖。帶有示例結構和查詢的編輯帖子。 – methodin 2010-09-27 20:09:18