我的工作目前仅对所有数据存储使用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