2012-03-26 47 views
2

我的Rails 3应用程序解决了棋盘游戏'Boggle'的变种。每个请求都涉及数千个字典查找。在请求之间持久保存大字典对象的最佳方法是什么?坚持轨道之间的字典请求

我的字典在Trie中实现,效果很好。问题是,Trie需要大约30秒才能建立(大字典)。如何在请求之间持续保存一个字典?该字典只是一个普通的Ruby对象,而不是ActiveRecord。

我想保持字典在这种情况下,Rails应用程序,尽管我怀疑标准的做法是委托字典查找到另一个进程(是吗?)。

谢谢。

回答

1

这是完全合理的,有一个普通的老红宝石对象或类充当Rails的模型。

如果你的字典与类的方法实现,那么这变得非常容易。将它移动到应用程序/模型中,Rails将自动加载该类并使其可用于您的控制器。添加一个初始化器到配置/初始化器,你可以确保当你的Rails应用程序启动时加载字典。

如果你的字典实际上是一个字典类的实例,那么这是不是有帮助。您可能最好将其初始化为全局常量。是的,我知道我们现在都受过训练,足以让人联想到全球化。但事实是单个(可能是不可变的)应用程序字典实际上需要加载到内存中并且全局可用。只要确保以可能避免混淆或冲突的方式命名(也许命名空间)即可。

0

你能不能将其存放在某种数据库中 - 无论是存储器内DB Redis的一样,memcached的,等...或者在DB持续性?

+0

这听起来很合理。但是,似乎有一个更好的解决方案。我觉得坚持下去会是多余的。 – bevanb 2012-03-26 20:47:35

0

平时要获得持久的请求饼干之间的幻觉中使用,但如果大量数据,是不是把整个对象的饼干是个好主意。 将字典存储在数据库中会更好,将ID保存在会话中,并在每次请求时检索/更新该对象。