1

最好用一个具体的例子来解释我的问题。

考虑一个餐厅用来接收客户订单的订单管理应用程序。我有一个名为 orders 的表,其中存储了所有这些。

现在每天表的大小都在增长,但访问的数据量是恒定的。一般来说,餐厅只对最后一天左右收到的订单感兴趣。例如,100 天后,“有趣”的数据只有表大小的 1/100 左右;1 年后是 1/365,依此类推。

当然,我想保留所有旧订单,但是只对当前订单感兴趣的应用程序的性能不断下降。那么,不让旧数据干扰“有趣”数据的最佳方法是什么?

根据我有限的数据库知识,我想到的一种解决方案是在同一个数据库中拥有两个相同的表 - order_present 和 order_past。新订单将进入“order_present”,cron 作业会将所有超过两天的已处理订单转移到“order_old”,保持“order_present”的大小不变。

这是否被认为是处理此问题的可接受解决方案。还有哪些其他解决方案?

4

1 回答 1

1

数据库服务器非常擅长处理卷。但是性能可能会受到物理硬件的限制。如果困扰您的是 IO 延迟,有几种解决方案可用。你真的需要评估什么最适合你的用例。

例如:

  1. 您可以对表进行分区以将其分布到多个物理磁盘上。
  2. 您可以进行分以将数据放到不同的物理服务器上
  3. 您可以使用最适合您的数据和应用程序的另一个存储引擎进行评估。与 InnoDB 相比,MyISAM 提供了更好的读取性能,但代价是不太符合 ACID
  4. 您可以使用只读副本将所有(大多数)“选择”查询委托给主数据库服务器(主)的副本(从属)

最后,MySQL 性能博客是关于这个主题的一个很好的资源。

于 2013-10-29T16:43:29.007 回答