2011-01-11 66 views
2

我有數據被插入到具有相同模式的多個數據庫中。出於性能原因存在多個數據庫。是否可以使用WCF數據服務查詢多個數據庫?

我需要創建一個客戶端可以用來查詢數據庫的WCF服務。但從客戶的角度來看,只有1個數據庫。我的意思是,當客戶端執行查詢時,它應查詢所有數據庫並返回組合結果。

我還需要爲客戶提供靈活性來定義自己的查詢。因此,我正在研究WCF數據服務,它爲客戶指定的查詢提供了非常好的功能。

到目前爲止,似乎DataService只能對單個數據庫進行查詢。我發現沒有覆蓋,將允許我發送查詢到多個數據庫。

有誰知道WCF數據服務是否可以使用相同模式查詢多個數據庫?

回答

1

I posted the question on the MSDN forums,並發現它需要大量的的努力。

它涉及creating your own data service provider,這是棘手的,可以很多工作。除了排序+分頁的合併結果之外,對於我願意做的事情來說,這是一項非常複雜和危險的任務。例如,如何查詢按名稱列排序的頁面1000的多個數據庫?我基本上必須查詢所有數據庫中的所有數據,按名稱排序,然後選擇第1000頁。

1

我認爲你必須編寫一個外觀服務,將查詢分派到底層 - 無論是按順序還是並行。您通常會以WCF數據服務使用反射提供程序的方式創建Facade,並且可以將LINQ to SQL或Entity Framework用於基礎數據庫。

如何創建一個數據服務使用反射提供程序(WCF數據服務): http://msdn.microsoft.com/en-us/library/dd728281.aspx

HTH,

--larsw

+0

這聽起來像是一個絕妙的想法,但是,我沒有看到任何可以攔截查詢的地方並在多個數據庫上執行它。你能更具體地說明如何做到這一點嗎? – Mas 2011-01-11 16:14:16

+0

我能想到的唯一方法是爲我的ObjectContext創建一個外觀,並滾動我自己的IQueryable 實現,該實現支持查詢多個數據庫。但是,這看起來會非常複雜。當DataService執行查詢時能夠注入我自己的功能將會很好。 – Mas 2011-01-11 17:12:21

0

好像你需要使用不同的方法。我正在談論分佈式緩存,如Oracle Coherence或NCache。該結構非常透明 - 您可以與內存數據庫進行交互,該數據庫與您的「備份映射」同步 - 一個或多個數據庫。

這樣的緩存中有很多有趣的功能。例如,您可以更改商店策略或使用不同的數據庫(MS SQL,Oracle等)構建備份映射。

相關問題