2012-08-31 28 views
2

我需要構建我的站點的報告部分,其中包含一些複雜的查詢,包括UNION,GROUP_CONCAT等。與我的實體的JPA集成迄今保持了數據庫獨立性。目前系統使用MsSQL,但我們希望稍後確定,如果需要,可以切換到Postgres或MySQL。如何使站點數據庫獨立報告部分

對這些報告採取什麼樣的好方法,以便在沒有太多工作的情況下,我可以使它適用於MySQL或Postgres?

該網站還使用了Spring

回答

2

在我看來,你的問題是或多或少的「我怎麼能利用供應商的特定功能,而不會被綁定到該供應商?」。

這個結果不是一個簡單的答案;可能最靈活的就是堅持JPA並吸收性能。

其他可能性:

  • 定義一個發佈一組接口的報告,作爲一個組成部分。使用CDI注入與您選擇的數據庫相關的實現

  • 上述變體,設置您自己的數據訪問DAO接口。像另一個更具體的ORM框架可以有更好的性能。最重要的是建立報告。

  • 如果您的業務允許,選擇一個RDBM來處理報表。在夜間(甚至可以根據需要,如果沒有太多數據),將生產數據庫轉儲到其中。

0

最好的選擇是使用data access objects,每個數據庫一個,每個符合一個通用接口。任何客戶端代碼都可以使用通用DAO接口,而無需瞭解底層數據庫。

使用Spring,很容易在DAO實現類之間交換配置選項,例如,如果你有一個CustomerDao接口,具有Oracle和DB2的實現,然後使用:

<bean id="customerDao" class="my.package.customer.OracleCustomerDao"/> 

<bean id="customerDao" class="my.package.customer.Db2CustomerDao"/> 
0

如果你希望你的SQL跨多個數據庫工作,那麼這裏就是你可以按照計劃:

  1. 測試跨多個數據庫
您的SQL

爲了獲得可移植性,您需要編寫可移植的SQL。確保SQL可移植性的唯一方法是檢查它的可移植性。

如果你堅持使用標準的SQL,那麼這應該是相當簡單的;你將無法使用特定於數據庫的功能,但是如果沒有它們,你可以做很多事情(它們主要是語法糖,或者是跨越關係模型,你希望不需要這樣做) 。如果你已經誤入了使用非標準的SQL,那麼可能很難明確你可以做到這一點,但如果你開始以一種嚴謹的方式工作,我會對你堅持標準的能力持樂觀態度。

如果您正在使用SQL Server,PostgreSQL將是第二個數據庫測試的好選擇,因爲它免費,易於設置且功能非常強大。