如何管理内存中的大对象

时间:2019-12-23 10:27:41

标签: xml ruby-on-rails-6 persistent-storage

我有一个Ruby on Rails v6应用程序。

我有一个来自XML文件的大型递归数据结构:我使用HappyMapper解析XML。

每个XML文件都很大,其结构为200Kb至3MB,

<tag>
   <x></x>
   <y></y>
   <tag>
      <x></x>
      <y></y>
      <tag>
         <x></x>
         <y></y>
         <tag>
            <x></x>
            <y></y>
        </tag>
     </tag>
   </tag>
</tag>

tag.rb模型如下:

require 'happymapper'

class Tag

    include HappyMapper

    tag "Tag"
    element   :x, String
    element   :y, String

    has_many  :tags, ::Tag, tag: 'Tag', xpath: '.'

如您所见,每个标签对象可以递归包含许多标签。

我无法将对象存储在数据库中,首先是因为我没有数据库,其次是因为每次交互都必须重新解析对象。

如果我以XML存储对象,那么将重新创建所有XML并将其保存在文件中,这是一个繁重的选择。

对我来说,解决方案是将解析后的XML保留在内存中,以便我可以通过用户界面进行管理,编辑和修改它,并且,当作业完成时,我想将其另存为XML一次。

很显然,整个对象要成为一个会话对象。

我想创建一个属于应用程序的哈希,并在会话中存储一个唯一的ID。每次互动后,哈希的有效期应为15分钟。

是否有人有其他建议或可以解释如何创建可从控制器访问的应用程序对象?

0 个答案:

没有答案