【发布时间】:2014-04-22 20:53:46
【问题描述】:
我正在重构我当前的架构,它对我来说太抽象了。
我使用自制的监控软件监控我的服务器。该软件向 Rails Web 服务器发送 HTTP 请求,其中包含大约十个不同字段的信息,因此我可以快速了解所有内容。
我目前的实现:
server [id, name, created_date, edited_date, ..., etc ]
status_update [id, server_id, field1, field2, field3, created_date, edited_date, ..., etc]
我将服务器视为用户,将状态更新视为推文。我删除了比第十个更早的 server_id 上的任何 status_update,只是为了防止增长到无穷大。
虽然我开始遇到一些并发症。我需要在索引页面上显示来自最新 status_update 的信息,我需要根据 status_update 信息对服务器进行排序,我需要存储来自某些 status_updates 的信息,这些信息可能比 10 个 status_updates 旧。似乎我将开始需要将来自 status_updates 的信息存储在服务器和 status_update 中,这将导致在插入时多次命中数据库。因此,我正在寻求重构。
我的要求: 我只需要显示最近更新的信息。 如果系统脱机,拥有接下来的 9 个 status_updates 有助于调试。 我需要能够根据最近 status_update 中的一些信息进行排序。 我需要数据库保持较小(Heroku 免费)。 理想的性能,除非必要,IE 不会多次访问数据库。 不复杂的数据库结构,所以我可以传递它。
编辑:附加信息 => 我希望最终监控大约 150-200 台服务器(对于业余开发者来说很多,但我很便宜)。每个监控服务每五分钟左右发布一次,除非出现问题。因此,最坏的情况是我每四个小时达到最大容量。
我想跟踪上次 X 事件发生的时间以及结果是什么会很好。因此,跟踪该信息必须移动到server 模型本身,因为我正在清除旧记录并且会在一个小时左右后丢失信息。虽然回想起来,我可以使用监控服务将这些信息保存在内存中,然后每五分钟发送一次,或者每次更改时只发送一次。我也可以仅在该信息发生更改时简单地编辑该信息,以便处理每个请求的更少信息。嗯!
【问题讨论】:
-
在我看来,您想做的所有事情都可以使用您当前的结构来完成。我没有看到重构的令人信服的理由。 你在这里看到的最严重的问题是什么?
-
@MikeSherrill'CatRecall' 查询变得如此复杂,以至于我需要通过 SQL 而不是 Active Record 访问数据。虽然这不是世界末日,但我更希望能够在 Rails 中使用 AR 而不是 SQL。我还需要存储一些比我正在保存的 10 个
update_status记录更长的数据,所以我怀疑我必须将它保存在server模型中的一个字段中。我只是觉得在一个帖子到服务器上两次访问数据库效率低下。是我想太多了吗?
标签: sql ruby-on-rails database ruby-on-rails-4