MSSQL Server分布式查詢

2021-10-12 16:23:05 字數 3016 閱讀 2821

本篇文章由泉州seowww.234yp.com 整理發布,mssql

www.234yp.com/article/168204.html 謝謝合作!

mssql

sql server所謂的分布式查詢(distributed query)是能夠訪問存放在同一部計算機或不同計算機上的sql server或不同種類的資料來源, 從概念上來說分布式查詢與普通查詢區別 它需要連線多個mssql伺服器也就是具有多了資料來源。實現在伺服器跨域或跨伺服器訪問。 而這些查詢是否被使用完全看使用的需要。

當然如果採用了分布式查詢 我們系統採取資料database也就可能在多個遠端[remote server]上訪問時:

如上擷取系統架構中關於資料與快取流向中涉及的分布式查詢業務, 當我們從客戶端client發起請求資料時。 首先檢查memcache server快取伺服器是否有我們想要資料。 如果沒有我需要查詢資料庫。 而此時資料要求查詢多個遠端伺服器上多個資料庫中表, 這時利用分布式查詢。獲得資料 然後更新我們在快取伺服器memcache server上資料保持資料更新同步, 同時向客戶端client直接返回資料。那如何來執行這一系列動作中最為關鍵分布式查詢?

《1》分布式查詢方式

我們知道microsoft微軟公用的資料訪問的api是ole_db, 而對資料庫mssql server 2005的分布式查詢支援也是ole_db方式.sql server 使用者可以使用分布式查詢訪問以下內容:

a:儲存在多個 sql server 例項中的分布式資料

b:儲存在各種可以使用 ole db 訪問介面訪問的關係和非關係資料來源中的異類資料

ole db 訪問介面將在稱為行集的**格式物件中公開資料。sql server 允許在 transact-sql 語句中像引用 sql server 表一樣引用

ole db 訪問介面中的行集,[其實不用關心這個行集概念 它的功能類似sql server中臨時表 不過它容積更大 能容納型別更多 更豐富]

sql server 例項的客戶機與 ole db 訪問介面之間的連線 如下圖:

從上圖可以看出。客戶端借助oledb介面可以訪問oracle/ms jet/ms sql/odbc/第三方等這些豐富資料來源來我們分布式查詢提供資料。 說了這麼多關於oledb底層支援。 關於在ms sql 2005中則支援兩種方式來進行分布式查詢:

使用新增鏈結伺服器方式(add link server)

使用特定名稱及特定資料來源來直接指定(add host names)

其實這兩種方式在實際運用中是有區別的:

方式a:add link server方式建立伺服器之間關聯。建立乙個鏈結的伺服器,使其允許對分布式的、針對 ole db 資料來源的異類查詢進行訪問。 一般適用於持久的資料操作 對於資料量偏大 伺服器之間交付時間長特點。

方式b: add host name 利用域來唯一識別資料庫以及資料庫表物件。 來實現跨伺服器訪問。 這種方式一般比較簡單 主要適用於對資料需求臨時性查詢是使用偏多。 不適合做大批量資料提取。 有效能瓶頸。

《2》分布式查詢實現

在進行實現分布式查詢之前。本次測試demo對應的sql版本:

確定sql server版本後如下會演示兩種方式來實現分布式查詢,並對distributed query中詳細細節進行說明。

《2.1》鏈結伺服器查詢

訪問遠端伺服器。

能夠對企業內的異類資料來源發出分布式查詢、更新、命令和事務。

能夠以相似的方式確定不同的資料來源

以下是**片段:

-- 建立連線伺服器 第一步建立連線 ip方式來控制

exec sp_addlinkedserver '192.168.10.104' , 'sql server'

-- 檢視鏈結伺服器資訊 [測試連線成功]

select name , product, provider, data_source, query_timeout, lazy_schema_validation, is_remote_login_enabled, is_rpc_out_enabled

from sys.servers

where is_linked= 1

如上市建立連線伺服器最簡單方式。建立鏈結伺服器過程其實呼叫了系統儲存過程sp_addlinkedserver. 第乙個引數為name 其實用來唯一標識鏈結伺服器。 當然可以其他任何有意義字串來定義,但我個人建議使用遠端伺服器的ip來標識。第二個引數是要新增為鏈結伺服器的 ole db 資料來源的產品名稱。 預設為null,如果指定」sql server「則無需指定其他引數。

如果你的本地裝有多個資料庫例項。 第乙個種方式就不適用。這是就需要用sql server2005架構來唯一標識:

-- 含架構名 查詢資料兩種模式

select top 10 * from [192.168.10.104]. wl . 架構名 . 表名

-- 架構名 [採用預設架構名 ]

select top 10 * from [192.168.10.104]. customerdb . dbo. users

對於sql server 2005架構這個概念很多人比較陌生:

在使用者角色設定中需要對指定訪問資料customerdb具有讀寫許可權:

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...