2013-06-24 23 views
0

我正在構建我的第一個Rails應用程序,並使其與思維獅身人面像一起工作得很好。我認識的大部分,但會喜歡它,如果有人可以幫助我澄清幾個概念問題思維獅身人面像和軌道問題

  1. 當獅身人面像查詢後顯示搜索結果,我應該使用從獅身人面像查詢返回的sphinx_attributes ?或者我的視圖應該使用普通的rails對象,例如@ property.title,@ property.amenities.title等?如果我使用普通的rails對象,那是不是意味着它會做額外的查詢?

  2. 在論壇中,我想顯示'未讀帖子'。很顯然,對於每個用戶/主題組合來說,這是真/假,所以我認爲我應該在主題的獅身人面像索引中緩存'讀者'ID。通過這種方式,我可以快速爲給定的user_id查詢所有未讀帖子。我有這個工作,但後來意識到它沒有意義,因爲獅身人面像索引之間存在時間延遲。因此,如果用戶點擊未讀郵件,它仍然會出現未讀,直到獅身人面像數據庫重新索引

  3. 我仍在開發,所以我手動索引/重建,但在生產上,什麼是重新索引之間的標準時間?

  4. 我有一個模型有幾個文本字段 - 我應該將這些全部轉換爲一個關於sphinx索引的列嗎?這當然比索引所有單獨的字段更快。

  5. 有點偏離主題,但只是想知道 - 當你訪問嵌套模型,例如@ property.agents.name,這是否會影響性能?或者,當從數據庫中提取屬性時,導軌會自動獲取所有相關條目?

回答

1

爲了回答您的每一個點:

  1. 對於這你的例子,sphinx_attributes不會有幫助。首先,您已經加載了該屬性,因此該標題可以直接使用,而無需額外的數據庫命中。而對於property.amenities.title,你正在處理的是Sphinx沒有的概念。通常,我只會使用sphinx_attributes來處理複雜的計算屬性,而不是標準列引用。

  2. 是的,你說得對,這個值會有延遲。

  3. 這取決於數據更改的頻率。我有一些可以每天索引的應用程序,因爲更改非常少見,而其他應用程序則每10分鐘運行一次。如果數據特別不穩定,我會考慮使用deltas(通常通過Sidekiq)在幾秒鐘內將更改反映在Sphinx中。

  4. 我不認爲這兩種方式差別很大 - 除非你想分別搜索這些列中的任何一個?如果是這樣,它將需要是一個單獨的領域。

  5. 默認情況下,當您使用每個屬性的代理時,該屬性的代理將從數據庫加載(每個屬性一次SQL調用)。您可以查看the eager loading docs,瞭解如何在處理多個記錄時更好地管理此問題。思考獅身人面像has the ability要通過:include選項到底層的ActiveRecord調用。

+0

非常感謝您的詳細回覆!我不能把它標記爲正確的,因爲我沒有聲譽但很抱歉,但我真的很感激它!重新編號2,有沒有更好的方法來解決這個問題?它當然是一個常見的功能,我希望對屬性「監視列表」做同樣的事情,但是如果用戶必須等待10分鐘才能看到他們的監視列表中的一個房產,那麼它就沒有用處了。 – Dave

+0

也許值得一讀關於增量值的內容,因爲這可以將滯後時間縮短到幾秒鐘。 – pat

相關問題