首页 > 解决方案 > Rails 模型(或变量)是否可以保存在服务器内存中并可供所有会话/作业使用?

问题描述

我有一个运行在 Raspberry Pi 上的 ruby​​-on-rails 应用程序,数据库在闪存上。该应用程序提供了一种通过用户手机上的网络客户端记录和查看各种硬件设备(GPIO 和 USB)状态的方法。

该应用程序有一个后台作业,每隔几秒从外部 GPS 读取当前位置。所有进程(Web 客户端视图和其他后台作业)在运行时都需要访问此位置信息。显而易见的方法是创建一个简单的模型,例如具有 lat 和 long 字段的 CurrentPosition,并让后台作业在每次获得新的 GPS 定位时更新模型。

但是,考虑到数据库在闪存上运行,并且位置每隔几秒更新一次,我担心重复、连续地写入数据库中的同一位置。

如果断电,位置信息不需要永久保存。所以明显的改进是将这些信息存储在服务器内存中。

问题:

  1. 如果我使用数据库,我是否应该担心过多的闪存写入周期?
  2. 我可以创建一个位于内存而不是数据库中的模型(但将其他模型保留在数据库中)吗?
  3. 或者某种形式的全局变量是更好的解决方案?如果是这样,其他客户端会话和其他可能有自己的 ruby​​ 实例的后台作业可以访问这些吗?

或任何其他创新(或明显)的解决方案。

马特

标签: ruby-on-rails

解决方案


它不必是一个成熟的模型,只是一个普通的红宝石对象。这样你就可以清楚地将它与你的 perdite 模型区分开来

您可以通过以下方式将其存储在内存中

config/initializers/position.rb

class LatLon

    NOW = [0.0, 0.0]

  end

然后在 rails 环境中的任何地方使用LatLon::NOW 使用你的工作来更新值并在其他地方读取值来访问该常量。

您可以使用该类来存储其他东西 -

  • 如果作业尚未运行,则为更好的空值
  • 如果您想要持久性但只是不太频繁的写入,您可以在关机时转储历史记录
  • 时间戳,以便您可以在提交 GPIO 数据日志之前检查位置的年龄
  • 用 getter 和 setter 格式化它,而不是像我用过的笨拙的 CONSTANT

推荐阅读