【发布时间】:2010-07-28 14:58:08
【问题描述】:
我正在尝试构建如下工作的东西(最终是一个 gem,但现在是一个应用程序)。
假设例如数据库记录是狗的品种。每个品种都有一个 Dog 父类和一个子类。实际品种直到运行时才知道。
当服务器启动时,它将从数据库加载记录并根据记录实例化类的实例,例如我可能有两只小猎犬和贵宾犬。当有人访问服务器时,他们可能想要访问其中一个狗实例。
为什么不直接创建实例呢?就我而言,“狗”基本上是包含算法和数据的类。算法不会改变,数据很少改变(以天为单位),但算法本身的执行,它使用数据和一些传入的动态数据(如时间戳),每秒将被访问多次。
每次都必须重新创建对象的实例并加载数据只是为了执行一个请求而在下一个请求时再次执行它是愚蠢的(请求不会更改对象的状态)。当我可以重用同一个对象时,我会在一秒钟内创建和销毁多个对象。
将它保留在会话中是没有意义的,因为想要贵宾犬的人不应该需要在她的会话对象中包含小猎犬信息;这是无关紧要的(并且无法扩展)。
如何将这些对象保存在内存中?我基本上想要一个查找表来保存实例。在 Java 中,我会创建一个带有某种类型的哈希图或位于内存中的数组的单例。在rails中,我通过在lib文件夹中创建一个单例类来尝试这个。我认为——我可能不理解这一点——当会话消失时,实例(它是单例的事实是没有实际意义的)正在丢失。
我找到的最接近的答案是http://www.ruby-forum.com/topic/129372,它基本上将所有内容都放在类字段和方法中。不知怎的,这似乎不对。
TIA!
补充:我来自Java。在 Java 中,我只需创建一个位于堆上或可能位于 JNDI 树中的对象,当 HTTP 请求进入时,它们将由一个 servlet 或 EJB 或一些可以访问持久性对象的每个请求项处理。我似乎无法在 rails 中找到等价物。
【问题讨论】:
-
+1 问题,我有一棵树用于查找。它根本不会改变,我不想在每个请求中都构造它。
标签: ruby-on-rails memory object persistence