資料庫數據存儲原理
㈠ 資料庫存儲原理。存一段數據,會在資料庫中保存兩次嗎當磁碟壞道而使資料庫損壞,修復資料庫是什麼原理
數據是不會存儲兩份的,但是資料庫都有事務日誌文件,對數據的修改都會被記日誌。當磁碟壞道破壞了資料庫文件時,可以使用備份還原資料庫,並使用日誌恢復數據到最新的狀態。不過完成這一操作,需要提前備份資料庫。
㈡ 分析大文本與圖像數據在資料庫內部的存儲原理。
圖像數據在資料庫內部的存儲原理:
XML 是文本型的數據交換結構,對於字元類型的文本交換非常的方便,實際工作中我們往往需要通過 XML 將二進制格式的圖形圖像信息數據進行數據交換。本文從介紹 BASE64 編碼的原理入手,通過採用 C 語言編寫 DB2 的嵌入存儲過程,實現了在資料庫內存中將文本格式的圖片文件到二進制 BLOB 欄位之間的轉換,並且就性能優化等提出若干建議,該設計思路和程序可以廣泛的應用到圖像圖形數據在 XML 的存儲和轉換。
--------------------------------------------------------------------------------
回頁首
XML 存儲圖形圖像的基本原理
XML 作為一種非常廣泛的數據交換的載體被廣泛的應用到了各行各業的數據交換中。對於圖形圖像數據的轉換,需要採用 Base64 編碼將二進制格式的圖形圖像信息轉換成文本格式再進行傳輸。
Base64 編碼轉換的思想是通過 64 個 ASCII 字元碼對二進制數據進行重新編碼組合,即將需要轉換的數據每三個位元組(24 位)為一組,再將這 24 位數據按每組 6 位進行重新劃分,在每組的最高 2 位填充 0 最終成一個完整的 8 位位元組。如果所要編碼的數據的位元組數不是 3 的整數倍,需要在最後一組數據填充 1 到 2 個位元組的 0 位元組。例如:我們對 ABC 進行 BASE64 的編碼,ABC 的編碼值:A(65), B(66), C(67)。再取二進制 A(01000001)B(01000010)C(01000011)連接起來構成 010000010100001001000011,然後按 6 位為單位分成 4 個數據塊並在最高位填充兩個 0 後形成 4 個位元組的編碼後的值(00010000)(00010100)(00001001)(00000011)。再將 4 個位元組的數據轉換成十進制數為(16)(20)(19)(3)。最後根據 BASE64 給出的 64 個基本字元表,查出對應的 ASCII 碼字元(Q)(U)(J)(D)。這里的值實際就是數據在字元表中的索引。
BASE64 字元表:
。
某項目的數據交換採用 XML 的為介質,XML 的結構包括個人基本信息:姓名、性別、相片等信息,其中相片信息是採用經過 BASE64 函數轉換後的文本型數據,圖像圖形信息通過 BASE64 進行數據轉換後,形成文本格式的數據類型,再將相應的數據存放到 XML 中,最終形成可供交換的文本型的 XML 數據結構。
XML 的數據結構如下所示:
<?xml version=」1.0」 encoding=」UTF-8」 ?>
<HeadInfo>
<TotalNum>10<TotalNum>
<TransDate>2007-10-18</TransDate>
</HeadInfo>
<Data>
<Name> 張三 </Name>
<Sex> 男 </Sex>
<Photo>/9j/4AAQSkZJRgABAQAAAQABAAD......</Photo>
<Data>
--------------------------------------------------------------------------------
回頁首
相片數據在 DB2 嵌入式 C 程序的實現方法
該項目要求能夠在 DB2 資料庫中將相片數據存儲為二進制 BLOB 格式。我們採用 DATASTAGE 進行 XML 數據載入,將 XML 中的姓名、性別等基本數據項載入到相應的欄位,其中文本型的相片數據則載入到 CLOB 欄位中,再按照 BASE64 的編碼規則進行逆向轉碼,整個數據流程如下圖所示:
圖 1. 相片存儲流程圖
用戶的相片每天的更新數據為 30 萬條,而且每個相片的平均大於 32KB,為了獲得最佳的資料庫性能,選擇採用 C 存儲過程的方式開發了 BASE64 的轉換函數。每次函數讀取存儲在 CLOB 欄位的文本格式數據全部存儲到內存中,並且通過 decode 函數在內存中進行轉碼,轉碼後再存入資料庫中。
程序的清單 1 是逐行讀取 CLOB 欄位,並且調用 decode 函數進行轉碼;程序的清單 2 是 decode 函數的關鍵性代碼。完整的程序見源代碼下載部分。
清單 1. 讀入 CLOB,寫入 BLOB 欄位
EXEC sql BEGIN DECLARE SECTION;
SQL TYPE IS CLOB(100 K) clobResume; //CLOB 結構體變數
SQL TYPE IS BLOB(100 K) blobResume; //BLOB 結構體變數
sqlint16 bobind;
sqlint16 lobind;
sqlint16 cobind;
sqlint32 idValue;
EXEC SQL END DECLARE SECTION;
int clob2bin(void)
{
// 聲明 SQLCA 結構
struct sqlca sqlca;
int charNb;
int lineNb;
long n;
n=0;
// 定義資料庫游標
EXEC SQL DECLARE c1 CURSOR WITH HOLD FOR
SELECT czrkxp_a
FROM CZRK_blob for update;
EXEC SQL OPEN c1;
// 活動 CLOB 欄位的信息,已經 CLOB 欄位的大小
EXEC SQL FETCH c1 INTO :clobResume:cobind;
// 循環讀取 CLOB 欄位,並且調用 DECODE 轉碼函數
while (sqlca.sqlcode != 100)
{
if (cobind < 0)
{
printf(「 NULL LOB indicated.\n」);
}
else
{
n++;
decode(); // 文本格式到二進制流的轉碼函數
printf(「\nCurrent Row =%ld」,n);
// 數據寫入 BLOB 欄位
EXEC SQL update czrk_blob set czrkxp_blob = :blobResume
where current of c1; ;
// 提交事務
EXEC SQL COMMIT;
}
EXEC SQL FETCH c1 INTO :clobResume:cobind ;
}
// 關閉游標
EXEC SQL CLOSE c1;
EXEC SQL COMMIT;
return 0;
}
清單 2. 文本文件到二進制文件的轉換
void decode( void )
{
unsigned char in[4], out[3], v;
int I, len;
long j,k;
j = -1;
k=0;
// 將讀入 CLOB 結構體變數的數據進行轉換
while( j < clobResume.length){
for( len = 0, I = 0; I < 4 && ( j < clobResume.length ); i++ ) {
v = 0;
while((j < clobResume.length) && v == 0 ) {
j++;
v = (unsigned char) clobResume.data[j];
v = (unsigned char) ((v < 43 || v > 122) ? 0 : cd64[ v – 43 ]);
if( v ) {
v = (unsigned char) ((v == 『$』) ? 0 : v – 61);
}
}
if( j < clobResume.length ) {
len++;
if( v ) {
in[ I ] = (unsigned char) (v – 1);
}
}
else {
in[i] = 0;
}
}
if( len ) {
decodeblock( in, out );
// 寫入到 BLOB 結構體變數中
for( I = 0; I < len – 1; i++ ) {
blobResume.data[k] = out[i];
k++;
}
}
}
blobResume.length= k;
}
--------------------------------------------------------------------------------
回頁首
數據的轉換效率和優化建議
在 IBM P570 資料庫伺服器上運行,該程序的運行效率非常高,先後進行了幾個數量級的測試,最終平均測試的轉換效率為:每 1 萬筆數據記錄,轉換的效率 55 秒,即 182 條 / 秒。值得注意的是,整個轉換過程佔用 CPU 的量並不特別大,主要的性能瓶頸在磁碟陣列中。
以後可以進一步在以下方面進行調優,確保程序轉換的效率更高:
1)採用多進程調用的方式,以獲得更高的並發數量;
2)採用每 10 次或者 100 次提交事務的方式,減少訪問磁碟的次數;
3)將 CLOB 和 BLOB 分別放置在不同的表空間上,並且將表空間分布在在多個磁碟上,獲得最佳的磁碟訪問速度。
㈢ 資料庫原理及應用
資料庫原理是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗餘度、與應用程序彼此獨立的數據集合。應用:資料庫管理系統可以依據它所支持的資料庫模型來作分類,例如關系式、XML;或依據所支持的計算機類型來作分類,例如伺服器群集、行動電話;或依據所用查詢語言來作分類。
在資料庫的發展歷史上,資料庫先後經歷了層次資料庫、網狀資料庫和關系資料庫等各個階段的發展,資料庫技術在各個方面的快速的發展。特別是關系型資料庫已經成為目前資料庫產品中最重要的一員,80年代以來, 幾乎所有的資料庫廠商新出的資料庫產品都支持關系型資料庫,即使一些非關系資料庫產品也幾乎都有支持關系資料庫的介面。
這主要是傳統的關系型資料庫可以比較好的解決管理和存儲關系型數據的問題。隨著雲計算的發展和大數據時代的到來,關系型資料庫越來越無法滿足需要,這主要是由於越來越多的半關系型和非關系型數據需要用資料庫進行存儲管理。
同時,分布式技術等新技術的出現也對資料庫的技術提出了新的要求,於是越來越多的非關系型資料庫就開始出現,這類資料庫與傳統的關系型資料庫在設計和數據結構有了很大的不同, 它們更強調資料庫數據的高並發讀寫和存儲大數據。
(3)資料庫數據存儲原理擴展閱讀
資料庫管理系統主要完成對資料庫的操縱與管理功能,實現資料庫對象的創建、資料庫存儲數據的查詢、添加、修改與刪除操作和資料庫的用戶管理、許可權管理等。它的安全直接關繫到整個資料庫系統的安全,其防護手段主要有:
(1)使用正版資料庫管理系統並及時安裝相關補丁。
(2)做好用戶賬戶管理,禁用默認超級管理員賬戶或者為超級管理員賬戶設置復雜密碼;為應用程序分別分配專用賬戶進行訪問;設置用戶登錄時間及登錄失敗次數限制,防止暴力破解用戶密碼。
(3)分配用戶訪問許可權時,堅持最小許可權分配原則,並限制用戶只能訪問特定資料庫,不能同時訪問其他資料庫。
(4)修改資料庫默認訪問埠,使用防火牆屏蔽掉對外開放的其他埠,禁止一切外部的埠探測行為。
(5)對資料庫內存儲的重要數據、敏感數據進行加密存儲,防止資料庫備份或數據文件被盜而造成數據泄露。
(6)設置好資料庫的備份策略,保證資料庫被破壞後能迅速恢復。
(7)對資料庫內的系統存儲過程進行合理管理,禁用掉不必要的存儲過程,防止利用存儲過程進行資料庫探測與攻擊。
(8)啟用資料庫審核功能,對資料庫進行全面的事件跟蹤和日誌記錄。
㈣ 資料庫原理是什麼
資料庫系統的基本概念
數據:實際上就是描述事物的符號記錄。
數據的特點:有一定的結構,有型與值之分,如整型、實型、字元型等。而數據的值給出了符合定型的值,如整型值15。
資料庫:是數據的集合,具有統一的結構形式並存放於統一的存儲介質內,是多種應用數據的集成,並可被各個應用程序共享。
資料庫存放數據是按數據所提供的數據模式存放的,具有集成與共享的特點。
資料庫管理系統:一種系統軟體,負責資料庫中的數據組織、數據操縱、數據維護、控制及保護和數據服務等,是資料庫的核心。
㈤ oracle資料庫的存儲原理是什麼
表空間,oracle邏緝存儲結構,表空間下包含一個或者多個物理的文件存儲。
所有用戶對象存放在表空間中。
與系統有關的對象存放在系統表空間中。
㈥ 什麼是資料庫列存儲,原理是怎樣的
資料庫列存儲不同於傳統的關系型資料庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因 此整個資料庫是自動索引化的。
按列存儲每個欄位的數據聚集存儲,在查詢只需要少數幾個欄位的時候,能大大減少讀取的數據量,一個欄位的數據聚集存儲,那就 更容易為這種聚集存儲設計更好的壓縮/解壓演算法。這張圖講述了傳統的行存儲和列存儲的區別:
㈦ 資料庫的工作原理是什麼
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今五十年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
㈧ MySQL資料庫能大量儲存數據的原理是什麼
原理就是硬碟容量大,硬碟容量不夠大, mysql 怎麼存大量數據?
另外,資料庫的功能不在於能存大量數據,如果只是存的話,直接存文件也行,一樣可以存大量數據。
資料庫的主要能力是提供針對這些數據的可編程能力和快速靈活的查詢功能。
㈨ 資料庫數據恢復的數據存儲及恢復的基本原理
數據存儲及恢復第一步--分區.當主引導記錄因為各種原因(硬碟壞道、病毒、誤操作等)被破壞後,一些或全部分區自然就會丟失不見了,根據數據信息特徵,我們可以重新推算計算分區大小及位置,手工標注到分區信息表,「丟失」的分區回來了。
數據存儲及恢復第二步--文件分配表.硬碟分區完畢後,接下來的工作是格式化分區。格式化程序根據分區大小,合理的將分區劃分為目錄文件分配區和數據區,文件分配表內記錄著每一個文件的屬性、大小、在數據區的位置。我們對所有文件的操作,都是根據文件分配表來進行的。文件分配表遭到破壞以後,系統無法定位到文件,雖然每個文件的真實內容還存放在數據區,系統仍然會認為文件已經不存在。我們的數據丟失了,就像一本小說的目錄被撕掉一樣。要想直接去想要的章節,已經不可能了,要想得到想要的內容(恢復數據),只能憑記憶知道具體內容的大約頁數,或每頁(扇區)尋找你要的內容。我們的數據還可以恢復回來。
數據存儲及恢復第三步--格式化與刪除.當我們需要刪除一個文件時,系統只是在文件分配表內在該文件前面寫一個刪除標志,表示該文件已被刪除,他所佔用的空間已被釋放, 其他文件可以使用他佔用的空間。所以,當我們刪除文件又想找回他(數據恢復)時,只需用工具將刪除標志去掉,數據被恢復回來了。當然,前提是沒有新的文件寫入,該文件所佔用的空間沒有被新內容覆蓋。格式化是將所有文件都加上刪除標志,或乾脆將文件分配表清空,系統將認為硬碟分區上不存在任何內容。格式化操作並沒有對數據區做任何操作,目錄空了,內容還在,藉助數據恢復知識和相應工具,數據仍然能夠被恢復回來。
數據存儲及恢復第四步--理解覆蓋.個文件被標記上刪除標志後,他所佔用的空間在有新文件寫入時,將有可能被新文件佔用覆蓋寫上新內容。這時刪除的文件名雖然還在,但他指向數據區的空間內容已經被覆蓋改變,恢復出來的將是錯誤異常內容。同樣文件分配表內有刪除標記的文件信息所佔用的空間也有可能被新文件名文件信息佔用覆蓋,文件名也將不存在了。
當將一個分區格式化後,有拷貝上新內容,新數據只是覆蓋掉分區前部分空間,去掉新內容佔用的空間,該分區剩餘空間數據區上無序內容仍然有可能被重新組織,將數據恢復出來。
同理,克隆、一鍵恢復、系統還原等造成的數據丟失,只要新數據佔用空間小於破壞前空間容量,數據恢復工程師就有可能恢復你要的分區和數據。
數據存儲及恢復第五步--硬體故障數據恢復。硬體故障的數據恢復當然是先診斷,對症下葯,先修復相應的硬體故障,然後根據修復其他軟故障,最終將數據成功恢復。
數據存儲及恢復第六步--磁碟陣列RAID數據恢復.其恢復過程也是先排除硬體及軟故障,然後分析陣列順序、塊大小等參數,用陣列卡或陣列軟體重組,重組後便可按常規方法恢復數據。
SAN和NAS是目前最受人矚目的兩種數據存儲方式:
SAN:一個共用的高速專用存儲網路,存儲設備集中在伺服器的後端。其優勢:高數據傳輸速度;加強存儲管理;加強備份、還原能力的可用性;同種服務的綜合。綜合SAN的優勢,它在高性能數據備份/恢復、集中化管理數據及遠程數據保護領域得到廣泛的應用。
NAS:是一個專用為提供高性能、低擁有成本和高可靠性的數據保存和傳送產品。其優勢:移除伺服器I/O瓶頸;簡便實現NT與UNIX下的文件共享;簡便的設備安裝管理與維護;按需增容,方便容量規劃;高可靠性;降低總擁有成本。
更多的數據存儲解決方案趨向於將NAS和SAN進行融合。原因:
·一些分散式的應用和用戶要求訪問相同的數據
· 對提供更高的性能,高可靠性和更低的擁有成本的專有功能系統的高增長要求
·以成熟和習慣的網路標准包括TCP/IP, NFS和CIFS為基礎的操作
·一個獲得以應用為基礎而更具商業競爭力的解決方案慾望
·一個全面降低管理成本和復雜性的需求
·一個不需要增加任何人員的高擴展存儲系統
·一套可以通過重構劃的系統以維持硬體和管理人員的價值