我工作過的大多數應用程序都有一些存儲在數據庫中的參考數據,例如類別,郵編,區號等......這些信息將會改變很少。大多數時候你想加載某種顯示名稱,就是這樣。在Rails中加載和管理參考數據
目前這並不會導致我太多頭痛,這很容易:在進行查詢時包含我需要的模型,但是前進會導致很多查詢噪音。
理想情況下,我希望在應用程序啓動時加載引用數據,並且在查詢中引用它時,它將從緩存中加載而不是轉到數據庫。
管理這個最好的方法是什麼?
我工作過的大多數應用程序都有一些存儲在數據庫中的參考數據,例如類別,郵編,區號等......這些信息將會改變很少。大多數時候你想加載某種顯示名稱,就是這樣。在Rails中加載和管理參考數據
目前這並不會導致我太多頭痛,這很容易:在進行查詢時包含我需要的模型,但是前進會導致很多查詢噪音。
理想情況下,我希望在應用程序啓動時加載引用數據,並且在查詢中引用它時,它將從緩存中加載而不是轉到數據庫。
管理這個最好的方法是什麼?
這是一個很好的問題,大多數Rails開發人員可能在某個時候需要處理這個問題。我已經嘗試在啓動時將所有內容加載到常量中。我也嘗試過使用Memcached或Redis和cached_model或cache_fu等插件,並在應用程序啓動時自動填充緩存。但是,這些方法僅適用於查找單個對象,並且完全不與ActiveRecord集成(例如,不能與關聯一起使用),因爲我相信您已經注意到了。
Memcached/Redis插件有一個明顯的市場,它具有更好的ActiveRecord集成,但這聽起來像是一項艱鉅的任務,所以我認爲我們很快就不會看到任何東西。
讓事態變得更糟的事實是,如果您預先加載了大量數據,您可能不希望在開發環境中的每個請求中都這樣做,這很難避免,因爲模型很懶 - 在開發中加載(並重新加載每個請求),可能你需要模型來加載數據。這意味着一個好的解決方案必須與ActiveRecord緊密集成,因此無論數據來自數據庫還是緩存(如果您在開發中未預加載),它都能正常工作。
無論如何,對於囉嗦的非答案抱歉,但我認爲討論可能是我們現在可以做的最好的。
希望我錯了。任何人?
你似乎已經擊中了頭部。目前爲止我看過的所有內容,包括cached_model/fu等等,都不能很好地與活動記錄集成。話雖如此,走出你的緩存來獲取參考數據感覺有點超過頂部,但這取決於你猜我有多少參考數據。這絕對是需要更多研究的內容,可能值得將它列入郵件列表。 – jonnii
是的,將20 MB的郵政編碼數據投入緩存中感覺不太好。但是,對於您的應用程序的每個實例,它的內存優於20 MB!同意這是Rails郵件列表的主題。 –