mysql - 如果找不到记录,如何通过扩展模型对 Rails 中的存档进行额外搜索?

标签 mysql ruby-on-rails model archive

我想知道是否有人知道以下问题的优雅解决方案:

假设我有一个包含订单和一堆数据的表。所以我有 100 万条记录,搜索开始需要时间。所以我想通过归档一些超过 3 年的数据来加快它的速度——将它保存到一个名为 orders-archive 的表中,然后从订单表中清除它们。因此,如果我们需要研究某些东西或客户想要提取较旧的信息——他们仍然可以,但 99% 的查找是在不超过一年半的订单上完成的——因此没有理由继续查看较旧的数据每时每刻。这些移动和清除操作可以每周进行一次。我已经做了一些测试,我知道我可以将搜索时间缩短大约 4 倍。到目前为止一切顺利,对吧?

但是我在考虑如何实现旧的存档查找,我能想到的唯一合理的事情是某种 if-else 如果在订单中找不到,请在订单存档中进行搜索。但是 - 我有大约 20 个表要存档,天知道通过代码完成了多少搜索/发现,我不想修改。所以我想知道是否有一个优雅的 rails-way 解决这个问题,通过某种方式扩展模型?有没有人处理过类似的情况?

谢谢。

最佳答案

MySQL 5.x 可以使用水平分区在 native 处理此问题。

分区背后的基本思想是告诉数据库将一定范围内的记录存储在一个单独的文件中。您仍然可以查询所有记录,但只要您只查询当前记录,数据库引擎就不会被所有存档记录拖累。

您可以使用 order_date 列或类似的东西作为分区的截止值。这是优雅的解决方案。

Overview of Partitioning in MySQL

否则,您的 if/else 动态生成查询的想法似乎是正确的。您可以在存档表之后添加年份数字并使用反射来构建表列表,然后使用它。

关于mysql - 如果找不到记录,如何通过扩展模型对 Rails 中的存档进行额外搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503760/

相关文章:

ruby-on-rails - 在 OS X Yosemite 上修复 Ruby

ruby-on-rails - 如何使用Sunspot建立具有多对多关系的构面搜索?

ios - 在 iOS 中采用 MVVM : ViewModel responsibilities?

ruby-on-rails - Rails 中的模型更新方法

php - MySQL 从另一个表插入,其中字段不为空

php - 选择具有月份和年份条件的查询

ruby-on-rails - Ruby on Rails : CanCan and static pages

java - spring中@ModelAttribute、model.addAttribute有什么区别?

Mysql找到非常短的字符串的匹配?

mysql - 无法删除(或对其执行任何其他操作)InnoDB 表