簡體   English   中英

Rails活動記錄在內存中的緩存

[英]rails active record caching in memory

我有一個模型,該模型通過兩個外鍵關系與另一個模型具有聯系。 在導入大量數據的同時,我對那些表(3-4K行)進行了很多查找,並且我試圖消除虛假的重復數據庫查找。 (理想情況下,我的數據庫只會執行異步寫入/插入操作)

我玩過按ID進行自己的緩存,最近切換到使用Rails.cache (現在使用MemoryStore。現在無需與其他實例同步,並且在導入計算機上非常豐富)。 但是,我發現我正在獲得相同關聯記錄的多個副本,並且我想擺脫它。

例如:

irb> p = Phone.includes([:site => :client, :btn => :client]).first. 

irb> p.site.client.object_id => 67190640 

irb> p.btn.client.object_id => 67170780

理想情況下,我希望它們指向內存中的同一對象。 Rails.cache會序列化事物的進/出,這只會使情況變得更糟,但是我對此感到驚訝。 我可以用關聯代理將利用我的緩存的方式覆蓋find_by_id()或類似的東西嗎?

也許我缺少另一個緩存模塊?

(請注意,此過程不涉及Web前端。所有模型和ORM)

嘗試使用IdentityCache (請參閱https://github.com/Shopify/identity_cache )。 我們目前有一個類似的問題。 我們之所以使用JRuby是因為它速度很快,但在目標環境中malloc卻很昂貴……因此更加需要緩存這些記錄實例。

ActiveRecord內曾經有一個IdentityMap ,但是由於關聯周圍的意外行為問題而被刪除。

剛剛注意到您在八月份問過這個問題,您找到了一個好的解決方案嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM