单表数据量过大处理策略

今天和一个朋友在讨论怎么样应对单表数据量过大,比如一些交易数据,每天都有10W的交易量。没有多久该表的查询,插入速度将变慢,最终将不可用。

对于关系数据库来说,应对单表数据量过大的策略大体上有两种。

  • 1,分表。
  • 2,归档历史数据。

1,分表

在一些场景下可以将不同年份的数据放至不同的表格中。比如2004年的数据放至Table-2004,而2005年的数据放至Table-2005中。或者自定义一些其它规则。

总体是思想是通过规则,将数据分别放至不同的表中,以证单表数据量不会太大。

应用此技术时,可以通过一些中间手段将这些中间表的细节隐藏起来,比如SQL Server中的分布式视图。

 

2,归档历史数据

还有一种策略是定期Archive历史数据,比如每年的年底,将上一年Production DB的数据Archive至History DB中。

比如在2004年的年底,我们将2002年的数据Archive至History DB;

在2005年的年底时将2003年的数据Archive至History DB。

总体思想是定期Archive数据,保证当时表格中的数据量在一定范围。以此来保证Production DB的速度,同时也可以查询/更新History DB的数据(查询/更新的速度可能很慢)。

应用此技术时,可以通过一些数据库重定向技术。在Production DB查询更新/失败时,去History DB进行查询/更新。

 

适用场景

1,分表操作适用于数据量巨大,但查询更新分布很平均。比如身份证系统,每个人可能被查到的概率大致相等。

2,归档历史数据适用于数据量巨大,但查询分布有规律——最近的数据最常被使用。比如我们的生产数据,5年前的数据基本不用,即使是用了只涉及到查询。这样我们就可以将5年前的数据归档至History DB中并进行查询的优化。

posted @ 2010-06-15 14:09  Jerry Chou  阅读(3227)  评论(1编辑  收藏  举报