2017-03-17 52 views
0

我有一個平臺,其中大量數據(每天數百萬條記錄)將存儲在Amazon Redshift中,但該數據也將定期處理一個cronjob和彙總的統計數據將在運行我的Rails應用程序的PostgreSQL數據庫中創建,而舊數據將從Redshift中清除。基本上,這意味着對於近期事件(最後一天或兩天)的統計信息,我的Rails模型需要從Redshift中提取,否則,它需要從PostgreSQL中提取。由於PostgreSQL數據庫只包含彙總統計信息,所以查詢也會有所不同。Rails 4模型,根據場景切換數據庫 - 尋求最佳設計模式

編寫代碼並不困難,但我不確定這樣的模型如何適合Rails。 ActiveRecord似乎非常緊密地將模型耦合到數據庫實現,所以我想我需要創建一個不擴展ActiveRecords的主模型,以及一個ActiveRecord模型和一個處理Redshift查詢的lib類。這是我的場景的最佳設計,還是我應該考慮其他設計模式?

回答

0

您可以嘗試使用外部數據包裝器從Postgres訪問Redshift表。看到這裏設置指南:http://www.vertabelo.com/blog/technical-articles/foreign-data-wrappers-for-postgresql

+0

這與ActiveRecord整合? 在這種情況下,邏輯將決定是使用模型的Redshift版本還是Postgres版本?它如何解釋這兩個數據庫的查詢會有所不同? – dpog

+0

你必須添加邏輯給你的應用程序,知道何時使用哪個數據庫。或者,您可以在UNION ALL視圖中包裝Postgres表和Redshift表,並將它們視爲單個模型。 FWIW,我實際上建議把所有這些數據放在Redshift中。 –

+0

你似乎誤解了這個問題。我不是技術性地問如何做到這一點,我知道如何做到這一點。 我想知道的是使用什麼設計模式。 我在想這需要一個工廠對象來生成正確版本的模型。我試圖確定這是否是最好的模式,以及將這些代碼放在Rails應用程序中的最佳位置 - 它是應用程序特定的,因此它不屬於/ lib。 – dpog