【发布时间】:2011-06-27 10:54:40
【问题描述】:
我们有一个名为 posts_content 的 mysql 表。
结构如下:
CREATE TABLE IF NOT EXISTS `posts_content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`forum_id` int(11) NOT NULL,
`content` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=79850 ;
问题是桌子变得非常大。许多千兆字节的数据(我们有一个爬行引擎)。
我们每天都在向表中插入数据,但我们很少检索数据。现在随着桌子变得越来越大,处理桌子变得越来越困难。
我们讨论了两种可能性
- 使用 MySQL 的分区功能,使用 forum_id 对表进行分区(大约有 50 个 forum_id,因此大约有 50 个分区。请注意,即使每个分区都这样做,最终也会再次增长到许多千兆字节的数据,甚至最终需要自己的驱动器
- 为每个 forum_id 创建单独的表并像这样拆分数据。
我希望我已经清楚地解释了这个问题。我需要知道的是,从长远来看,以上两者中的哪一个会是更好的解决方案。什么是副词。不赞成两种情况。
谢谢你
【问题讨论】:
-
我收到了这个问题,但是您提出的解决方案在我看来是一样的,只是其中一个 MySQL 提供了解决方案,而在情况 2 中,您似乎将构建自己的解决方案。我做对了吗?
-
Ozair Kafray - 有一些差异,我知道一些。例如,当您使用分区时,您以与以前相同的方式查询表,对于最终用户来说,它仍然是一个表,尽管它被分成许多文件。作为另一种方式的解决方案,如果您需要查询数据,您需要首先通过连接或临时表或类似的东西将所有表恢复到一起。拥有你永远不知道的任何功能……Darhazer 发布的链接很有趣
标签: mysql scalability partitioning