2012-03-26 67 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保存在會話中,並在每次請求時檢索/更新該對象。