2009-11-20 32 views
1

我有操縱大量類型的ActiveRecord模型(記錄是從複雜的操作中提取而從同一個表)的記錄的對象的問題,我想通過該對象之間圍繞設置控制器操作。所以我有幾個解決方案,但工資選擇哪種方式。更簡單但更醜陋的解決方案是將其保存在會話中。但是,正如我所知,由於頻繁的序列化和反序列化過程(通過Web服務 - SOAP和二進制格式化,序列化非常耗時),因此在會話中保存大對象集明顯降低了應用程序的性能。看起來很有前途的第二個選項是將所有這些ActiveRecord模型對象保存爲數據庫中的博客,並且通過一個查詢我們可以檢索所有這些對象,並可以使用該數據集執行必要的操作。但是我不知道如何在從數據庫中檢索所有對象後迭代所有對象,因爲它仍然是二進制對象格式。調用檢查方法顯示所有屬性和值,但我完全困惑。任何人都可以告訴我如何將ActiveRecord模型類型對象保存爲單個記錄二進制對象,並檢索它並遍歷數據集。我需要像Base64這樣的編碼嗎?最後將memcached產量期望的結果??或至少任何可以解決這個問題的鏈接?處理大的ActiveRecord對象設定爲二進制數據

對於冗長的問題和提前感謝抱歉。

+0

你有沒有想過使用Ajax?我不知道我是否可以在不知道爲什麼需要保留這個blob的情況下進行更深入的研究 – 2009-12-23 22:09:17

回答

0

答案,而且我討厭這樣說,是可能的方法是有缺陷的。是否需要更多時間才能再次查詢此確切數據,或者加載BLOB行並對其進行反序列化?我的猜測是,大致相同的時間沒有索引,但使用索引,您甚至可以從數據庫中獲取整個結果集,甚至可以在甚至沒有反序列化調用的情況下加載BLOB。

現在,也許我錯了,但可以肯定的數據回來的量大約是相同的,所以的分貝時間一大塊是完全一樣的。

Memcached的肯定會以同樣的方式證明是有益的,但在這裏只查詢緩存(假設你使用MySQL)將是有益的。對於同一事物的重複查詢應該通過任何一種方法快速返回,假設任何一種情況下的緩存足夠大以適應對象。

但你是正確的,存儲在會話中是個不錯的方法和BLOB大概也是最好大致相同只是老毛病又犯了查詢,讓查詢緩存返回。

但是,只是爲了涵蓋所有的基礎,總數據集有多大,回來多少以及您看到查詢需要多長時間?我猜這篇文章實際上是關於性能,但是被實施細節蒙上了陰影。