2012-03-12 75 views
1

我一直在研究Play應用程序(1.2.4),它會對日誌進行一些處理。這個框架並不是真正典型的東西(基本上我可能是唯一的用戶),但是測試一個想法是非常快的,我決定使用它。播放框架 - 從外部數據庫加載數據

我將加載存儲在單獨應用程序的日誌(數據庫)中的很多不同種類的事件和相關帳戶,將它們存儲在本地數據庫中,然後執行事件之間的關聯。到目前爲止,我只是提取日誌文件並將它們導入數據庫,但它笨拙,緩慢,容易出錯,並且在延長時間範圍時文件變得非常大。

我想找出一種方法來獲取對兩個外部數據庫的讀取訪問,運行查詢,然後在本地數據庫中創建本地存儲的對象。兩個外部數據庫都有不同的模式,當然這兩個數據庫是不同的。只有在導入時才需要連接,並且由於我從中導入數據的表包含很多列,而我只需要一些列(而且服務器很遠),所以我寧願查詢列需要。我很直接地在結果集中直接創建本地存儲的模型,所以我甚至不需要定義基於外部數據庫的模型。我可能還需要根據從數據庫B獲得的數據(例如,當日志行包含本地未存儲的用戶,在存儲事件之前從其他服務器獲取其數據)獲取外部數據庫A中的數據。只有在進口時才需要連接,理論上這是一次性事件。還有一個很大的好處是可以在不必重新啓動的情況下配置數據源設置(例如,在開始導入之前將主機/端口存儲在本地數據庫中並讀取值)。

我發現有關使用多個數據庫的大多數線程似乎都與通過在多個實例上使用相同模式傳播數據來減輕負載有關。我確實發現了一些有關使用不同模式分離數據庫的線索,但無法弄清楚這些解決方案將如何適應我的需求。對於任何反饋,我們都表示感謝。

回答

2

您可以像使用通常的方式連接到外部數據庫 - JDBC,Hibernate或其他。 Play爲內部託管模型添加了一些框架魔法,但沒有任何東西阻止您爲n個框架添加n種不同的訪問方法。您必須自己管理交易狀態等,但這與平時沒有什麼不同。

請注意,您也可以使用Spring配置這些外部數據庫。

如果這是一次性導入,您可能需要考慮編寫一個遷移工具來執行此操作,並讓您的主要應用程序專注於其日常工作。您可以在主應用程序和遷移應用程序之間共享數據庫模型,並使用Play編寫遷移應用程序。我們在之前的項目上做過這個,並且效果很好。

+0

謝謝,這似乎工作得很好。我知道一個遷移工具可以很好地工作,但我希望能夠動態獲取數據,所以首先獲取一個月,然後像我想要的那樣工作,然後再增加一些。此外,我正在考慮只在需要時才能獲取一些數據。我只是設置了JDBC,這看起來很完美。 – kamina 2012-03-16 21:06:07