2012-03-26 4 views
2

My Rails 3アプリはボードゲーム「Boggle」の変形を解決します。各リクエストには、何千もの辞書検索が含まれます。リクエスト間で大きな辞書オブジェクトを持続させる最善の方法は何ですか?Railsリクエスト間の辞書を維持する

私の辞書はTrieで実装されています。これはうまく機能します。問題は、Trieはビルドに約30秒かかることです(大きな辞書)。リクエストの間に1つの辞書を保持するにはどうすればよいですか? Dictionaryは単純なRubyオブジェクトであり、ActiveRecordではありません。

私は標準的なアプローチが別のプロセスに辞書ルックアップを委任することだとは思うが、この場合、Railsアプリケーションで辞書を保持したい(それは?)。

ありがとうございました。

答えて

1

普通の古いルビーオブジェクトまたはクラスをRailsモデルとして使用するのは完全に合理的です。

辞書がクラスメソッドで実装されている場合は、非常に簡単になります。それをapp/modelsに移動すると、Railsはクラスを自動的に読み込み、コントローラで利用できるようにします。 config/initializersに初期化子を追加すると、Railsアプリケーションの起動時に辞書がロードされるようにすることができます。

辞書が実際にDictionaryクラスのインスタンスである場合、これはあまり役に立ちません。おそらくグローバル定数として初期化することをお勧めします。はい、私は、今日、グローバル化のアイデアで奮闘するためにすべての訓練を受けていることを知っています。事実、単一の(おそらく不変の)アプリケーション辞書は実際にはメモリにロードされ、グローバルに利用可能である必要があります。ちょうどあなたが混乱や衝突を避けるような方法で名前を付ける(そしておそらく名前空間)ことを確かめてください。

0

redis、memcachedなどのメモリDBや永続的なDBのいずれかに格納できませんか?

+0

これは妥当と思われます。しかし、より良い解決策が必要になるようです。私はそれが冗長になると思う。 – bevanb

0

通常、リクエスト間の永続性の錯覚を得るために、クッキーが使用されますが、データが大きい場合は、オブジェクト全体をクッキーに入れることはお勧めできません。 DBに辞書を保存し、IDをセッションに保存し、各要求でそのオブジェクトを取得/更新する方がよいでしょう。

関連する問題