存儲點名稱
在執行存儲過程時,我們常遇到執行超時的情況。如果是因為要處理的數據過多,修改流程復雜等原因的話,如以用以下方法解決:在存儲過程的處理工作中加上事務管理:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --->要這行
BEGIN TRAN /* 這里是程序處理代碼段*/commit transaction
QuitWithRollback:
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION
END 以下是事務相關的知識:BEGIN TRANSACTION--開始事務DECLARE @errorSun INT --定義錯誤計數器SET @errorSun=0 --沒錯為0UPDATE a SET id=232 WHERE a=1 --事務操作SQL語句SET @errorSun=@errorSun+@@ERROR --累計是否有錯UPDATE aa SET id=2 WHERE a=1 --事務操作SQL語句SET @errorSun=@errorSun+@@ERROR --累計是否有錯IF @errorSun<>0 BEGIN PRINT '有錯誤,回滾'ROLLBACK TRANSACTION--事務回滾語句END ELSE BEGIN PRINT '成功,提交'COMMIT TRANSACTION--事務提交語句END1.什麼是事務:事務是一個不可分割的工作邏輯單元,在資料庫系統上執行並發操作時事務是做為最小的控制單元來使用的。他包含的所有資料庫操作命令作為一個整體一起向系提交或撤消,這一組資料庫操作命令要麼都執行,要麼都不執行。2.事務的語句開始事物:BEGIN TRANSACTION 提交事物:COMMIT TRANSACTION 回滾事務:ROLLBACK TRANSACTION3.事務的4個屬性①原子性(Atomicity):事務中的所有元素作為一個整體提交或回滾,事務的個元素是不可分的,事務是一個完整操作。②一致性(Consistemcy):事物完成時,數據必須是一致的,也就是說,和事物開始之前,數據存儲中的數據處於一致狀態。保證數據的無損。③隔離性(Isolation):對數據進行修改的多個事務是彼此隔離的。這表明事務必須是獨立的,不應該以任何方式以來於或影響其他事務。④持久性(Durability):事務完成之後,它對於系統的影響是永久的,該修改即使出現系統故障也將一直保留,真實的修改了資料庫4.事務的保存點 SAVE TRANSACTION 保存點名稱 --自定義保存點的名稱和位置 ROLLBACK TRANSACTION 保存點名稱 --回滾到自定義的保存點 二事例 所謂事務是指一組邏輯操作單元,它使數據從一種狀態變換到另一種狀態。包括四個特性:1、原子性 就是事務應作為一個工作單元,事務處理完成,所有的工作要麼都在資料庫中保存下來,要麼完全回滾,全部不保留2、一致性 事務完成或者撤銷後,都應該處於一致的狀態3、隔離性 多個事務同時進行,它們之間應該互不幹擾.應該防止一個事務處理其他事務也要修改的數據時, 不合理的存取和不完整的讀取數據4、持久性 事務提交以後,所做的工作就被永久的保存下來 示例:創建一個存儲過程,向兩個表中同時插入數據Create proc RegisterUser(@usrName varchar(30),@usrPasswd varchar(30),@age int,@sex varchar(10),@PhoneNum varchar(20),@Address varchar(50) )as beginbegin traninsert into userinfo(userName,userPasswd)values(@usrName,@usrPasswd)if @@error<>0begin rollback tranreturn -1endinsert into userdoc(userName,age,sex,PhoneNumber,Address)values(@Usrname,@age,@sex,@PhoneNum,@Address)if @@error<>0begin rollback tranreturn -1endcommit tranreturn 0end事務的分類按事務的啟動與執行方式,可以將事務分為3類:顯示事務 也稱之為用戶定義或用戶指定的事務,即可以顯式地定義啟動和結束的事務。分布式事務屬於顯示事務自動提交事務默認事務管理模式。如果一個語句成功地完成,則提交該語句;如果遇到錯誤,則回滾該語句。隱性事務當連接以此模式進行操作時,sql將在提交或回滾當前事務後自動啟動新事務。無須描述事務的開始,只需提交或回滾每個事務。它生成連續的事務鏈。一、顯示事務通過begin transacton、commit transaction、commit work、rollback transaction或rollback work等語句完成。1、啟動事務格式:begin tran 事務名或變數 with mark 描述2、結束事務格式:commit tran 事務名或變數 (事務名與begin tran中的事務名一致或commit work 但此沒有參數3、回滾事務 rollback tran 事務名或變數 | savepoint_name | savepoint_variable 或rollback work 說明:清除自事務的起點或到某個保存點所做的所有數據修改4、在事務內設置保存點格式:save tran savepoint_name | savepoint_variable 示例:use bookdbgobegin tran mytraninsert into book values(9,"windows2000',1,22,'出版社')save tran mysavedelete book where book_id=9rollback tran mysavecommit trangoselect * from bookgo可以知道,上面的語句執行後,在book中插入了一筆記錄,而並沒有刪除。因為使用rollback tran mysave 語句將操作回滾到了刪除前的保存點處。5、標記事務格式:with mark 例:使用資料庫標記將日誌恢復到預定義時間點的語句 在事務日誌中置入一個標記。請注意,被標記的事務至少須提交一個更新,以標記該日誌。BEGIN TRAN MyMark WITH MARK UPDATE pubs.dbo.LastLogMark SET MarkTime = GETDATE() COMMIT TRAN MyMark 按照您常用的方法備份事務日誌。BACKUP LOG pubs TO DISK='C:/Backups/Fullbackup.bak' WITH INIT 現在您可以將資料庫恢復至日誌標記點。首先恢復資料庫,並使其為接受日誌恢復做好准備。 RESTORE DATABASE pubs FROM DISK=N'C:/Backups/Fullbackup.bak' WITH NORECOVERY 現在將日誌恢復至包含該標記的時間點,並使其可供使用。請注意,STOPAT在資料庫正在執行大容量日誌時禁止執行。 RESTORE LOG pubs FROM DISK=N'C:/Backups/Logbackup.bak' WITH RECOVERY, STOPAT='02/11/2002 17:35:00'5、不能用於事務的操作創建資料庫 create database 修改資料庫 alter database 刪除資料庫 drop database 恢復資料庫 restore database 載入資料庫 load database 備份日誌文件 backup log 恢復日誌文件 restore log 更新統計數據 update statitics 授權操作 grant 復制事務日誌 mp tran 磁碟初始化 disk init 更新使用sp_configure後的系統配置 reconfigure二、自動提交事務 sql連接在begin tran 語句啟動顯式事務,或隱性事務模式設置為打開之前,將以自動提交模式進行操作。當提交或回滾顯式事務,或者關閉隱性事務模式時,將返回到自動提交模式。示例: 由於編譯錯誤,使得三個insert都沒執行use testgocreate table testback(cola int primary key ,colb char(3))goinsert into testback values(1,'aaa')insert into testback values(2,'bbb')insert into testback value(3,'ccc')goselect * from testbackgo 沒有任何結果返回三、隱式事務通過 API 函數或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 語句,將隱性事務模式設置為打開。下一個語句自動啟動一個新事務。當該事務完成時,再下一個 Transact-SQL 語句又將啟動一個新事務。當有大量的DDL 和DML命令執行時會自動開始,並一直保持到用戶明確提交為止,切換隱式事務可以用SET IMPLICIT_TRANSACTIONS 為連接設置隱性事務模式.當設置為 ON 時,SET IMPLICIT_TRANSACTIONS 將連接設置為隱性事務模式。當設置為 OFF 時,則使連接返回到自動提交事務模式 語句包括: alter table insert open create delete revoke drop select fetch truncate table grant update 示例: 下面使用顯式與隱式事務。它使用@@tracount函數演示打開的事務與關閉的事務:use testgoset nocount oncreate table t1(a int)goinsert into t1 values(1)goprint '使用顯式事務'begin traninsert into t1 values(2)print '事務外的事務數目:'+cast(@@trancount as char(5))commint tranprint '事務外的事務數目:'+cast(@@trancount as char(5))goprintgoset implicit_transactions on go print '使用隱式事務'goinsert into t1 values*4)print'事務內的事務數目:'+cast(@@trancount as char(5))commint tran print'事務外的事務數目:'+cast(@@trancount as char(5))go執行結果: 使用顯示事務事務內的事務數目:2 事務外的事務數目:1 使用隱式事務事務內的事務數目:1 事務外的事務數目:0四、分布式事務跨越兩個或多個資料庫的單個sql server中的事務就是分布式事務。與本地事務區別:必須由事務管理器管理,以盡量避免出現因網路故障而導致一個事務由某些資源管理器成功提交,但由另一些資源管理器回滾的情況。 sql server 可以由DTc microsoft distributed transaction coordinator 來支持處理分布式事務,可以使用 BEgin distributed transaction 命令啟動一個分布式事務處理 分二階段:A 准備階段 B 提交階段執行教程:1、sql 腳本或應用程序連接執行啟動分布式事務的sql語句2、執行該語句的sql在為事務中的主控伺服器3、腳本或應用程序對鏈接的伺服器執行分布式查詢,或對遠程伺服器執行遠程存儲過程。4、當執行了分布式查詢或遠程過程調用後,主控伺服器將自動調用msdtc以便登記分布式事務中鏈接的伺服器和遠程伺服器5、當腳本或應用程序發出commit或rollback語句時,主控sql將調用msdtc管理兩階段提交過程,或者通知鏈接的伺服器和遠程伺服器回滾其事務。
❷ 對象存儲、塊存儲、文件存儲分別是什麼有什麼區別
你可以把塊理解成整個硬碟,文件理解成硬碟中的文件,對象理解成很多台伺服器中的很多塊硬碟。
❸ 圖的五種存儲結構
圖的鄰接矩陣(Adjacency Matrix): 圖的鄰接矩陣用兩個數組來表示圖。一個一維數組存儲圖中頂點信息,另一個二維數組(一般稱之為鄰接矩陣)來存儲圖中的邊或者弧的信息。從鄰接矩陣中我們自然知道一個頂點的度(對於無向圖)或者有向圖中一個頂點的入度出度信息。
假設圖G有n個頂點,則鄰接矩陣是一個n*n的方陣。
1.對於如果圖上的每條邊不帶權值來說,那麼我們就用真(一般為1)和假(一般為0)來表示一個頂點到另一個頂點存不存在邊。下面是一個圖的鄰接矩陣的定義:
鄰接矩陣法實現帶權值的無向圖的創建如下:
按照如圖輸入各邊(不重復)
測試程序如下:
結果可得該矩陣,證明創建樹成功。 假設n個頂點e條邊的創建,createGraph演算法的時間復雜度為O(n+n*n+e)。如果需要創建一個有向圖,那麼和上面一樣一個一個錄入邊下標和權值。
鄰接矩陣這種存儲結構的優缺點: 缺點是對於邊數相對頂點較少的稀疏圖來說會存在極大的空間浪費。假設有n個頂點,優點是對於有向完全圖和無向完全圖來說鄰接矩陣是一種不錯的存儲結構,浪費的話也只浪費了n個頂點的容量。
在樹的存儲結構一節中我們提到對於孩子表示法的第三種:用一段連續的存儲單元(數組)存儲樹中的所有結點,利用一個單鏈表來存儲數組中每個結點的孩子的信息。對於圖的存儲結構來說,我們也可以利用這種方法實現圖的存儲
鄰接表(Adjacency List): 這種數組與鏈表相結合的存儲方法叫做鄰接表。1.為什麼不也用單鏈表存儲圖的結點信息呢?原因就是數組這種順序存儲結構讀取結點信息速率快。對於頂點數組中,每個數據元素還需要存儲一個指向第一個鄰接頂點的指針,這樣才可以查找邊的信息2.圖中每個頂點Vi(i > 0)的所有鄰接點構成一個線性表 (在無向圖中這個線性表稱為Vi的邊表,有向圖中稱為頂點作為弧尾的出邊表) ,由於鄰接點的不確定性,所以用鏈表存儲,有多少個鄰接點就malloc一個空間存儲鄰接點,這樣更不會造成空間的浪費(與鄰接矩陣相比來說)。3.對於鄰接表中的某個頂點來說,用戶關心的是這個頂點的鄰接點,完全可以遍歷用單鏈表設計成的邊表或者出邊表得到,所以沒必要設計成雙鏈表。
鄰接表的存儲結構:
假設現在有一無向圖G,如下圖:
從鄰接表結構中,知道一個頂點的度或者判斷兩個頂點之間是否存在邊或者求一個頂點的所有鄰接頂點是很容易的。
假設現在有一有向圖G,如下圖:
無向圖的鄰接表創建示例如下:
假設在上圖(無向圖)中的V0V1V2V3頂點值為ABCD,則依據下面測試程序可得結果:
鄰接表的優缺點: 優點是:鄰接表存儲圖,既能夠知道一個頂點的度和頂點的鄰接結點的信息,並且更不會造成空間的浪費。缺點是鄰接表存儲有向圖時,如果關心的是頂點的出度問題自然用鄰接表結構,但是想了解入度需要遍歷圖才知道(需要考慮逆鄰接表)。
十字鏈表(Orthogonal List) :有向圖的一種存儲方法,它把鄰接表和逆鄰接表結合起來,因此在十字鏈表結構中可以知道一個頂點的入度和出度情況。
重新定義頂點表的結點如下圖:
現在有一有向圖如下圖:
則它的存儲結構示意圖為:
其定義如下:
十字鏈表是用來存儲有向圖的,這樣可以看出一個頂點的出入度信息。對於無向圖來說完全沒必要用十字鏈表來存儲。
在無向圖中,因為我們關注的是頂點的信息,在考慮節約空間的情況下我們利用鄰接表來存儲無向圖。但是如果我們關注的是邊的信息,例如需要刪除某條邊對於鄰接表來說是挺繁瑣的。它需要操作兩個單鏈表刪除兩個結點。因此我們仿照十字鏈表的方式對邊表結點結構重新定義如下圖:
它的鄰接多重表結構為:
多重鄰接表的優點:對於邊的操作相比於鄰接表來說更加方便。比如說我們現在需要刪除(V0,V2)這條邊,只需將69步驟中的指針改為nullptr即可。
邊集數組(edgeset array): 邊集數組是由兩個數組組成,一個存儲頂點信息,另一個存儲邊的信息,這個邊數組中的每個數據元素由起點下標,終點下標,和權組成(如果邊上含有權值的話)。
邊數組結構如下圖:
邊集數組實現圖的存儲的優缺點:優點是對於邊的操作方便快捷,操作的只是數組元素。比如說刪除某條邊,只需要刪除一個數組元素。缺點是:對於圖的頂點信息,我們只有遍歷整個邊數組才知道,這個費時。因此對於關注邊的操作來說,邊集數組更加方便。
❹ 存儲元數據叫什麼節點
元數據是為了描述數據的相關信息而存在的數據。主節點不會存儲數據,數據節點專門存儲數據,主節點存儲了元數據信息。主節點的磁碟中存儲了文件到塊的關系,集群啟動後,數據節點會報告名位元組點 機器和塊的關系,這兩個關系組合起來便可找到文件所在機器的位置。
❺ 分布式存儲支持多節點,節點是什麼,一個磁碟還是一個主控
節點是什麼?
節點是存儲節點的簡稱,一般來說1個節點是1個存儲伺服器。
其中一個存儲節點壞了是否影響數據的訪問?
這個主要取決於你採取的數據保護措施,主要有以下幾種:
多副本:同一份數據會保存多份(通常設置為 2 副本或 3 副本),即使副本所在的節點宕機也不會造成數據丟失;
HA(高可用):節點宕機時,該節點上的虛擬機自動遷移至集群內其它節點,降低業務中斷時間;
機架感知:根據機房物理拓撲結構,將副本分配在不同的機架、機箱、主機上,有效減少甚至避免物理硬體(電源、交換機等)故障導致的數據丟失。理論上,3 副本結合機架感知配置,系統可最多容忍 2 個機架上的主機全部失效;
快照:為虛擬機打快照,在其發生故障時將數據恢復至快照狀態;
雙活:同城雙數據中心,災難時無損快速恢復業務(RPO=0);
備份:異地主備數據中心,災難時盡可能挽回數據損失。
