MyBatis知多少(8)关系型数据库
MyBatis的存在就是為了簡(jiǎn)化對(duì)關(guān)系數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)。數(shù)據(jù)庫(kù)的確非常復(fù)雜,要正確地使用它們需要做很多的工作。數(shù)據(jù)庫(kù)負(fù)責(zé)管理數(shù)據(jù)和修改數(shù)據(jù)。我們使用數(shù)據(jù)庫(kù)而不簡(jiǎn)簡(jiǎn)單單地使用一個(gè) 平板文件的原因就在于數(shù)據(jù)庫(kù)為我們提供了許多好處,特別是在數(shù)據(jù)完整性、性能以及安全性方面。
數(shù)據(jù)完整性
數(shù)據(jù)完整性可能是數(shù)據(jù)庫(kù)提供的最重要的好處了,因?yàn)闆](méi)有數(shù)據(jù)完整性,其他一切就沒(méi)有意義了。如果數(shù)據(jù)不是一致的、可靠的以及正確的,那它們又有多少價(jià)值呢。數(shù)據(jù)庫(kù)通過(guò)使用強(qiáng)數(shù) 據(jù)類(lèi)型,強(qiáng)制約束,以及使用事務(wù)從而實(shí)現(xiàn)數(shù)據(jù)完整性的要求。
數(shù)據(jù)庫(kù)是強(qiáng)類(lèi)型的,即一旦創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)表,那么它的每個(gè)列就被指定為只能存儲(chǔ)某種特定類(lèi)型的數(shù)據(jù)。數(shù)據(jù)庫(kù)管理系統(tǒng)保證了存儲(chǔ)在表中的數(shù)據(jù)的類(lèi)型相對(duì)于列是正確的。舉個(gè)例子, 某個(gè)表可能將其某列定義為VARCHAR(25> NOT NULL。這就保證了存儲(chǔ)在該列中的數(shù)據(jù)是字符且 長(zhǎng)度不會(huì)超過(guò)25,另外定義中的NOT NULL部分保證了該數(shù)據(jù)是必需的,也即你必須為該列提供 一個(gè)值。
除了強(qiáng)數(shù)據(jù)類(lèi)型,還可以對(duì)數(shù)據(jù)庫(kù)表使用一些其他約束。這些約束通常在范圍上更廣,因?yàn)?它們處理的往往不只是某一列。約束通常涉及對(duì)表中多條記錄(甚至是多個(gè)表)的驗(yàn)證。例如 UNIQUE約束就要保證表中指定列的值不重復(fù)。再如外鍵(FOREIGN KEY)約束,這種約束保證 表中某列的取值一定來(lái)自于關(guān)聯(lián)表中的相關(guān)列。外鍵約束是用于描述表間關(guān)系的,因此它對(duì)于關(guān) 系數(shù)據(jù)庫(kù)設(shè)計(jì)以及數(shù)據(jù)完整性非常重要,不可或缺。
數(shù)據(jù)庫(kù)維護(hù)數(shù)據(jù)完整性最重要的方式之一就是使用事務(wù)。大多數(shù)業(yè)務(wù)功能都需要使用很多種類(lèi)型的數(shù)據(jù),它們往往來(lái)自不同的數(shù)據(jù)庫(kù)。通常這些數(shù)據(jù)會(huì)以某種方式相互關(guān)聯(lián),因此需要一致 更新。使用事務(wù),數(shù)據(jù)庫(kù)管理系統(tǒng)可以保證所有的相關(guān)數(shù)據(jù)以一種一致的方式被更新。更重要的是,事務(wù)允許系統(tǒng)的多個(gè)用戶(hù)同時(shí)更新數(shù)據(jù)而不造成沖突。關(guān)于事務(wù)還有許多知識(shí)需要了解。
性能
關(guān)系數(shù)據(jù)庫(kù)可以幫助我們獲得使用平板文件時(shí)很難獲得的高性能。也就是說(shuō),數(shù)據(jù)庫(kù)性能并不是免費(fèi)的,要想獲得高性能你需要大量的時(shí)間和專(zhuān)家經(jīng)驗(yàn)。數(shù)據(jù)庫(kù)性能可被分為3個(gè)關(guān)鍵因素: 設(shè)計(jì)、軟件調(diào)整以及硬件。
要提高數(shù)據(jù)庫(kù)的性能,首先要考慮的因素就是設(shè)計(jì)。一個(gè)糟糕的關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)帶來(lái)的低效 可能用再多的軟件調(diào)整和額外的硬件也無(wú)法糾正。糟糕的設(shè)計(jì)可能造成死鎖、指數(shù)級(jí)的關(guān)系運(yùn)算 或者是幾百萬(wàn)條記錄的數(shù)據(jù)庫(kù)表掃描。正確的設(shè)計(jì)非常重要。
對(duì)大型數(shù)據(jù)庫(kù)來(lái)說(shuō),軟件調(diào)整是提高性能要考慮的第二重要的因素。調(diào)整關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)需 要有相應(yīng)的對(duì)我們使用的特定RDBMS軟件有過(guò)專(zhuān)門(mén)訓(xùn)練且富有經(jīng)驗(yàn)的專(zhuān)業(yè)人士。雖然RDBMS 軟件的某些特征號(hào)稱(chēng)是跨越各個(gè)不同的產(chǎn)品的,但通常每種產(chǎn)品都有其精妙而細(xì)微的差別,因此 需要針對(duì)該特定軟件的專(zhuān)業(yè)人士。性能調(diào)整可以帶來(lái)某些巨大的好處。例如僅僅是數(shù)據(jù)庫(kù)索引的 調(diào)整就可以將原本需要執(zhí)行幾分鐘的復(fù)雜查詢(xún)變?yōu)橹恍鑾酌敕N。RDBMS中可調(diào)整的部分有很多, 如高速緩存、文件管理、各種索引算法,甚至還可以考慮操作系統(tǒng)。同一個(gè)RDBMS軟件在不同 的操作系統(tǒng)上表現(xiàn)出的行為可能也是不同的,因此計(jì)對(duì)不同的操作系統(tǒng)也要進(jìn)行不同的調(diào)整。不 用多說(shuō)了,反正調(diào)整數(shù)據(jù)庫(kù)軟件需要付出大量的努力。數(shù)據(jù)庫(kù)到底應(yīng)該如何調(diào)整己經(jīng)超出了本書(shū) 的討論范圍,但是知道軟件調(diào)整也是一種非常重要的提高數(shù)據(jù)庫(kù)性能的因素還是很重要的。請(qǐng)與 DBA (即數(shù)據(jù)庫(kù)管理員)好好協(xié)調(diào)。
大型關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)通常對(duì)計(jì)算機(jī)硬件的要求都比較高。也正是因?yàn)檫@個(gè)原因,許多公司里性能最強(qiáng)大的服務(wù)器往往都是數(shù)據(jù)庫(kù)服務(wù)器。在許多公司里,數(shù)據(jù)庫(kù)就是他們的“宇宙中心”,因此 針對(duì)數(shù)據(jù)庫(kù)的硬件投入大量的資金也就不足為奇了。快速磁盤(pán)陣列、I/O控制器、硬件高速緩存以 及網(wǎng)絡(luò)接口,所有這一切對(duì)于大型數(shù)據(jù)庫(kù)管理系統(tǒng)的性能來(lái)說(shuō)都是至關(guān)重要的。有了這些,你就再 不能將硬件作為糟糕的數(shù)據(jù)庫(kù)設(shè)計(jì)的借口或者作為RDBMS調(diào)整的替代了。硬件不應(yīng)該拿來(lái)解決性 能問(wèn)題——它應(yīng)當(dāng)用來(lái)滿(mǎn)足性能需求。關(guān)于硬件更深入的討論同樣也超出了本書(shū)的范圍,但當(dāng)你使 用一個(gè)大型數(shù)據(jù)庫(kù)系統(tǒng)時(shí),考慮到這個(gè)因素還是很重要的。也還請(qǐng)你與DBA好好協(xié)調(diào)。
安全性
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)也提供了額外的安全性。我們?cè)谌粘9ぷ髦惺褂玫拇罅繑?shù)據(jù)都是保密的。近年來(lái),個(gè)人隱私越來(lái)越受到關(guān)注,安全性已經(jīng)成為所有數(shù)據(jù)都需具備的一個(gè)基本要求。基于這個(gè) 原因,甚至一個(gè)人的全名這樣的簡(jiǎn)單信息也可以被認(rèn)為是保密的,因?yàn)樗菨撛诘奈ㄒ粯?biāo)識(shí)信息。
其他的信息(例如,社會(huì)保險(xiǎn)號(hào)碼和信用卡賬號(hào))需要像強(qiáng)加密這樣的更高級(jí)別的安全保護(hù)。大 多數(shù)商務(wù)性質(zhì)的關(guān)系數(shù)據(jù)庫(kù)都包括許多先進(jìn)的安全特性,允許更細(xì)粒度的安全性以及數(shù)據(jù)加密。 每個(gè)數(shù)據(jù)庫(kù)都有其獨(dú)特的安全需求。最重要的是你要理解它們,因?yàn)閼?yīng)用程序代碼絕不能削弱數(shù) 據(jù)庫(kù)的安全策略。
不同的數(shù)據(jù)庫(kù)有不同級(jí)別的數(shù)據(jù)完整性、性能和安全性。通常來(lái)說(shuō),數(shù)據(jù)庫(kù)的大小、數(shù)據(jù)的價(jià)值以及數(shù)據(jù)庫(kù)相關(guān)人員的多少會(huì)決定這些級(jí)別。
系列文章:
MyBatis知多少(1)
MyBatis知多少(2)
MyBatis知多少(3)
MyBatis知多少(4)MyBatis的優(yōu)勢(shì)
MyBatis知多少(5)業(yè)務(wù)對(duì)象模型
MyBatis知多少(6)表現(xiàn)層與業(yè)務(wù)邏輯層
MyBatis知多少(7)持久層
轉(zhuǎn)載于:https://www.cnblogs.com/Coda/p/4649627.html
總結(jié)
以上是生活随笔為你收集整理的MyBatis知多少(8)关系型数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java数据结构与算法(26) - ch
- 下一篇: 为了防止程序重排序,慎用volatile