Mysql“分区”与将数据拆分到不同的表中

Imr*_*hsh 5 mysql partitioning scalability

我们有一个名为 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 ;
Run Code Online (Sandbox Code Playgroud)

问题是桌子变得相当大。许多千兆字节的数据(我们有一个爬行引擎)。

我们每天都会向表中插入数据,但很少检索数据。现在,随着桌子变得相当大,处理桌子变得越来越困难。

我们讨论了两种可能性

  1. 使用MySQL的分区功能使用forum_id对表进行分区(大约有50个forum_id,因此大约有50个分区。请注意,即使每个分区如此创建,最终也会增长到许多千兆字节的数据,甚至最终可能需要自己的数据驾驶
  2. 为每个forum_id 创建单独的表并像这样分割数据。

我希望我已经清楚地解释了这个问题。我需要知道的是,从长远来看,以上两种解决方案中哪一种是更好的解决方案。副词是什么?副词 两种情况。

感谢您

Max*_*sky 4

不同之处在于,在第一种情况下,您让 MySQL 来进行分片,而在第二种情况下,您需要自己进行分片。MySQL 不会扫描任何不包含数据的分片,但是如果您有查询,WHERE forum_id IN(...)它可能需要扫描多个分片。据我记得,在这种情况下,操作是同步的,例如MySQL一次查询一个分区,您可能希望异步实现它。一般情况下,如果自己分区的话,比较灵活,但是对于简单的分区,基于forum_id,如果一次只查询1个forum_id,MySQL分区就可以了。

我的建议是阅读MySQL关于分区的文档,特别是限制和限制部分,然后再决定。