gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:02:02 24 4
gpt4 key购买 nike

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

假设我有一个包含订单和一堆数据的表。所以我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com