2012-03-19 45 views
0

我有一個遺留數據庫,有一個氣質(最好)的連接。這個數據庫上的數據每週更新一次。我的應用程序的用戶只需要讀取權限。從數據庫查詢導軌存儲結果

我遇到的問題是,偶爾對DB的查詢返回零,所以各種不好的事情發生在我的應用程序。

有沒有一種方法可以查詢數據庫,直到我得到一個有效的響應,然後將該響應存儲在我的Rails應用程序的某處?這樣,存儲的版本將返回給我的用戶。那麼,也許每週一次,我可以重新查詢數據庫,直到它返回一個有效的對象?

爲了增加複雜性,遺留數據庫是SQL服務器,所以我不得不安裝和使用rails-sqlserver,它工作得很好,但可能以某種方式增加了問題。

回答

2

您在請求週期中遇到的問題是,實際提取數據的請求可能會緩慢運行(因爲它需要請求直到結果不爲零,這可能需要一段時間),所以你的用戶會錘擊刷新按鈕,只是排隊更多的請求,直到你的SQL服務器或應用程序被淹沒。

如果我這樣做,我可能會設置一個Resque任務來設置每週或每天獲取所需的所有數據(可能是數據庫的完整轉儲)。將結果數據轉儲到數據存儲區:無論是本地數據庫還是類似redis或memcached的數據存儲區(如果您不特別關心持久性)。由於它是異步的,您可以根據需要多次獲取數據提取權。在你的應用程序方面,甚至不要嘗試連接到氣質數據庫;考慮對所有請求具有權威性的「中間」數據庫。因此,如果數據不存在,則假定它在SQL服務器上也不存在。

當然,這種方法的缺點是,如果SQL服務器有一個非常大的數據庫,你不能把它全部複製到一個更穩定的中間位置。您必須選擇數據的一個子集或依賴於每個請求的緩存方法,正如您所建議的那樣......但我認爲如果您可以避免這種情況,那麼這是最好的方法。

+0

我同意你的意見。你知道我在哪裏可以找到有關從sql server db導入數據到mysql db的文檔嗎?我沒有看太多的轉換,因此我爲什麼認爲自己被遺忘了db – 2012-03-19 16:56:14

+0

不幸的是我不......如果你讓他們都通過ActiveRecord連接起來,你總是可以從一個數據庫讀取它並保存到另一個?這可能是一個很好的第二個問題,我不會回答,因爲我沒有很好的答案。 ;) – Veraticus 2012-03-19 17:21:30