我有分佈式數據庫體系結構,其中數據存儲在多個SQL服務器中。使用單個ado.net查詢查詢多個數據庫
我該如何通過運行一個查詢來選擇/更新/刪除。例如「select * from employees」應該返回我擁有的所有數據庫中的數據。
如何編寫跨多個SQL服務器運行的單個查詢並獲取單個統一視圖到我的Web服務器。
注:由於SQL服務器的數量可以在不同的時間,所以我要尋找從1995年起大規模管理鏈接查詢(向上或向下)鏈接查詢別的東西改變是一個很大的痛苦
我有分佈式數據庫體系結構,其中數據存儲在多個SQL服務器中。使用單個ado.net查詢查詢多個數據庫
我該如何通過運行一個查詢來選擇/更新/刪除。例如「select * from employees」應該返回我擁有的所有數據庫中的數據。
如何編寫跨多個SQL服務器運行的單個查詢並獲取單個統一視圖到我的Web服務器。
注:由於SQL服務器的數量可以在不同的時間,所以我要尋找從1995年起大規模管理鏈接查詢(向上或向下)鏈接查詢別的東西改變是一個很大的痛苦
如果您打開到範圍內的不同服務器的連接,則該事務將被強制爲分佈式事務。
例子:
using (TransactionScope scope = new TransactionScope())
{
conn1.Open(); //Open connection to db1
conn2.Open(); //Open connection to db2
// Don't forget to commit the transaction so it won't rollback
scope.Complete()
}
去跟不同的數據庫/連接,您會通過TransactionScope需要一個分佈式事務;幸運的是,這其實是比DB-交易容易(雖然你需要一個參考System.Transactions.dll):
using(TransactionScope tran = new TransactionScope()) {
// lots of code talking to different databases/connections
tran.Complete();
}
此外,TransactionScope
巢自然和SqlConnection
自動登記,使得它很容易使用。
值得注意的是,要在TransactionScope中使用分佈式事務,您需要使用Windows 2000或更高版本並具有Microsoft分佈式事務控制器( MSDTC)服務正在運行 – 2009-12-30 13:27:13
通過事務處理我暗示通過運行一個查詢來選擇/更新/刪除例如「select * from employees」應該返回來自所有三個數據庫的數據 – user72486 2009-12-30 16:17:04
這裏最好的解決方案是使用虛擬DBMS將多個後端融合到一個明顯的後端 - 因此,您的查詢將轉到虛擬DBMS,然後將其適當地轉發給實際的數據存儲。
OpenLink Virtuoso是一種選擇。 Virtuoso打開到任何ODBC可訪問(包括JDBC訪問,通過ODBC到JDBC橋)數據源的連接。
根據需要,您的數據使用應用程序可以通過ODBC,JDBC,OLE-DB或ADO.NET連接到Virtuoso。所有的遠程鏈接對象(表,視圖,存儲過程等)都可以通過所有數據訪問機制獲得。
儘管您可以使用此處概述的其他技術獲得類似結果,但這些要求最終用戶瞭解所有關於後端數據結構的信息,並自行優化查詢。使用Virtuoso時,內置的基於成本的優化器將重新編寫查詢,以基於虛擬架構在遠程對象中鏈接時構建的虛擬架構,以最少的可能網絡流量提供儘可能最快的結果。
我希望這有助於!
特德
ObDisclaimer:我爲OpenLink的軟件工作,但不直接從任何人選擇使用我們的產品中受益。
您應該在推薦您的僱主生產的產品時披露您的聯繫。 – 2014-07-03 19:04:34
除非您願意插入某種類型的中介(如SQL Express實例),並且可能會與其他服務器進行調解,您可能無法使用SQL CLR 。但這很麻煩。
簡單地發出一堆異步請求,然後在他們到達時將響應合併到單個DataTable(或等效)中會容易得多。通過使用本機ADO.NET樣式的異步調用,所有查詢都可以並行進行。在將數據讀入單個DataTable時,您當然需要使用鎖。
按交易我暗示選擇/更新/刪除通過運行一個查詢。例如「select * from employees」應該返回來自所有三個數據庫的數據。 – user72486 2009-12-30 16:16:31