一、程序設(shè)計語言
1.程序設(shè)計語言的歷史和簡介
(1)簡介
程序設(shè)計語言是為了書寫計算機(jī)程序而人為設(shè)計的符號語言吧凉,用于對計算過程進(jìn)行描述隧出、組織和推導(dǎo)。
(2)歷史和發(fā)展
程序設(shè)計語言的廣泛使用始于1957年出現(xiàn)的FORTRAN客燕,程序設(shè)計語言的發(fā)展是一個不斷演化的過程鸳劳,其根本推動力是更高的抽象機(jī)制以及對程序設(shè)計思想的更好支持。
低級語言與高級語言
計算機(jī)硬件只能識別由0也搓、1組成的機(jī)器指令序列赏廓,即機(jī)器指令程序涵紊,因此機(jī)器指令是最基本的計算機(jī)語言。
由于機(jī)器指令是特定的計算機(jī)系統(tǒng)所固有的幔摸、面向機(jī)器的語言摸柄,所以用機(jī)器語言進(jìn)行程序設(shè)計時效率很低,程序的可讀性很差既忆,也難以修改和維護(hù)驱负。
因此,人們就用易記憶的符號代替0患雇、1序列來表示機(jī)器指令跃脊,例如,用ADD表示加法苛吱,用SUB表示減法等酪术。用符號表示的指令稱為匯編指令,匯編指令的集合被稱為匯編語言翠储。
匯編語言的源程序由若干條語句組成绘雁,其中可以有三類語句:指令語句、偽指令語句和宏指令語句援所。
指令語句又稱為機(jī)器指令語句庐舟,將其匯編后能產(chǎn)生相應(yīng)的機(jī)器代碼,這些代碼能被CPU直接識別并執(zhí)行相應(yīng)的操作住拭∨猜裕基本的指令有ADD、SUB和AND等废酷,書寫指令語句時必須遵守指令的格式要求瘟檩。
偽指令語句指示匯編程序在匯編源程序時完成某些工作,例如為變量分配存儲單元地址澈蟆,給某個符號賦一個值等。偽指令語句經(jīng)編譯后不產(chǎn)生機(jī)器代碼卓研。
在匯編語言中趴俘,還允許將多次重復(fù)使用的程序段定義為宏。宏指令語句就是宏的引用奏赘。
匯編語言的書寫格式在很大程度上取決于特定計算機(jī)的機(jī)器指令寥闪,因此它仍然是一種面向機(jī)器的語言,人們稱機(jī)器語言和匯編語言為低級語言磨淌。
在此基礎(chǔ)上疲憋,人們開發(fā)了功能更強(qiáng)、抽象級別更高的語言以支持程序設(shè)計梁只,于是就產(chǎn)生了面向各類應(yīng)用的程序設(shè)計語言缚柳,稱為高級語言埃脏。常見的有Java、C秋忙、C++彩掐、PHP、Python等灰追。
2.程序設(shè)計語言的定義
一般地堵幽,程序設(shè)計語言的定義都涉及語法、語義和語用等方面弹澎。
(1)語法是指由程序設(shè)計語言的基本符號組成程序中的各個語法成分(包括程序)的一組規(guī)則朴下。其中由基本字符構(gòu)成的符號(單詞)書寫規(guī)則稱為詞法規(guī)則,由符號構(gòu)成語法成分的規(guī)則稱為語法規(guī)則苦蒿。
(2)語義是程序設(shè)計語言中按語法規(guī)則構(gòu)成的各個語法成分的含義桐猬,分為靜態(tài)語義和動態(tài)語義。靜態(tài)語義是指編譯時可以確定的語法成分的含義刽肠,而運(yùn)行時刻才能確定的含義是動態(tài)語義溃肪。
一個程序的執(zhí)行效果說明了該程序的語義,它取決于構(gòu)成程序的各個組成部分的語義音五。
(3)語用表示了構(gòu)成語言的各個記號和使用者的關(guān)系惫撰,設(shè)計符合的來源、使用和影響躺涝。
3.程序設(shè)計語言的分類
(1)命令式和結(jié)構(gòu)化程序設(shè)計語言
命令式語言是基于動作的語言厨钻,在這種語言中,計算被看成是動作的序列坚嗜。命令式語言族開始于Fortran夯膀,Pascal和C語言都可以體現(xiàn)命令式程序設(shè)計的關(guān)鍵思想。
在這種語言中苍蔬,計算機(jī)被看作是動作的序列诱建,程序就是用語言提供的操作命令書寫的一個操作序列。用命令式程序設(shè)計語言編寫程序碟绑,就是描述解題過程中每一步的過程俺猿,程序的運(yùn)行過程就是問題的求解過程,因此也稱為過程式語言格仲。
機(jī)器語言及匯編語言是最早的命令式語言押袍。
通常所稱的結(jié)構(gòu)化程序設(shè)計語言屬于命令式語言類,其結(jié)構(gòu)特性主要體現(xiàn)在以下幾個方面:
①用自頂向下的逐步精化的方法編程
②按模塊組織的方法編程
③程序只包含順序凯肋、判定及循環(huán)構(gòu)造谊惭,而且每種構(gòu)造只允許單入口和單出口。
結(jié)構(gòu)化程序的結(jié)構(gòu)簡單清晰、模塊化強(qiáng)圈盔,描述方式接近人們習(xí)慣的推理式思維方式豹芯,因此可讀性強(qiáng)。C药磺、PASCAL等都是典型的結(jié)構(gòu)化程序設(shè)計語言告组。
(2)面向?qū)ο蟮某绦蛟O(shè)計語言
程序設(shè)計語言的演化從機(jī)器語言開始到匯編語言到各種結(jié)構(gòu)化高級語言,最后到支持面向?qū)ο蠹夹g(shù)的面向?qū)ο笳Z言癌佩,反映的就是一條抽象機(jī)制不斷提高的演化道路木缝。
C++、Java和Smalltalk是面向?qū)ο蟪绦蛟O(shè)計語言的代表围辙,它們都支持封裝我碟、繼承、多態(tài)等面向?qū)ο蠹夹g(shù)姚建。
(3)函數(shù)式程序設(shè)計語言
函數(shù)式設(shè)計語言是一類以λ演算為基礎(chǔ)的語言矫俺,其基本概念來自于LISP,這是一個在1958年為了人工智能應(yīng)用而設(shè)計的語言掸冤。函數(shù)是一種對應(yīng)規(guī)則(映射)厘托,使定義域的每個元素和值域中的唯一的元素相對應(yīng)。
常見的函數(shù)式程序設(shè)計語言有Haskell稿湿、Scala铅匹、Scheme、APL等饺藤。
(4)邏輯型程序設(shè)計語言
邏輯型程序設(shè)計語言是一類以形式邏輯為基礎(chǔ)的語言包斑,其代表是建立在關(guān)系理論和一階謂詞理論基礎(chǔ)上的PROLOG。PROLOG有很強(qiáng)的推理功能涕俗,適用于編寫自動定理證明罗丰、專家系統(tǒng)和自然語言理解等問題的程序。
4.高級編程語言簡介
二再姑、計算機(jī)中的數(shù)據(jù)
1.數(shù)據(jù)
(1)數(shù)據(jù)的定義
數(shù)據(jù)(data)是事實(shí)或觀察的結(jié)果萌抵,是對客觀事物的邏輯歸納,是用于表示客觀事物的未經(jīng)加工的的原始素材询刹。 數(shù)據(jù)可以是連續(xù)的值谜嫉,比如聲音、圖像凹联,稱為模擬數(shù)據(jù),也可以是離散的哆档,如符號蔽挠、文字,稱為數(shù)字?jǐn)?shù)據(jù)。在計算機(jī)系統(tǒng)中澳淑,數(shù)據(jù)以二進(jìn)制信息單元0比原、1的形式表示。
(2)數(shù)據(jù)與信息的區(qū)別
①數(shù)據(jù)是物理的杠巡,而數(shù)據(jù)是釋義的量窘;
? ? 信息是對數(shù)據(jù)的解釋,是數(shù)據(jù)含義的體現(xiàn)氢拥。
②數(shù)據(jù)反映的是事物的表象蚌铜,信息反映的是事物的本質(zhì)。
③數(shù)據(jù)時信息的重要來源嫩海,可以用人工或自動化裝置進(jìn)行通訊冬殃,翻譯和處理;信息是根據(jù)一定的規(guī)則對數(shù)據(jù)承載的事實(shí)進(jìn)行組織后形成的結(jié)果叁怪。
④數(shù)據(jù)的形式變化多端审葬,很容易受載體的影響,信息則比較穩(wěn)定奕谭,不隨載體的性質(zhì)而隨意改變涣觉。? ?
(3)計算機(jī)常用的編碼方式
①ASCII碼
用一個字節(jié)大小表示常用的字符,最開始ASCII碼只表示128個字符血柳,只需要7位表示官册,最高位統(tǒng)一用0表示。
可打印字符有95個混驰;
第一個可打印字符的ASCII是32攀隔,為空格;
最后一個可打印字符的ASCII是126栖榨,為~;
控制字符有33個昆汹;
第一個大寫字母的ASCII 為65;
第一個小寫字母的ASCII為97婴栽;
第一個數(shù)組的ASCII為48.
②GB 2312:信息交換用漢字編碼字符集
GB2312編碼適用于漢字處理满粗、漢字通信等系統(tǒng)之間的信息交換,通行于中國大陸;新加坡等地也采用此編碼愚争。中國大陸幾乎所有的中文系統(tǒng)和國際化的軟件都支持GB 2312映皆。
基本集共收入漢字6763個和非漢字圖形字符682個。整個字符集分成94個區(qū)轰枝,每區(qū)有94個位捅彻。每個區(qū)位上只有一個字符,因此可用所在的區(qū)和位來對漢字進(jìn)行編碼鞍陨,稱為區(qū)位碼步淹。
③Unicode
統(tǒng)一編碼,對于不同國家字符都能解析。(漢字用兩個字節(jié)表示)
④UTF-8
UTF-8是UCS字符集的另一種編碼方式缭裆,UTF-16的每個單元是兩個字節(jié)(16位)键闺,而UTF-8的每個單元是一個字節(jié)(8位)。UTF-16中用一個或兩個雙字節(jié)表示一個字符澈驼,UTF-8中用一個或幾個單字節(jié)表示一個字符辛燥。
可以認(rèn)為UTF-8編碼是根據(jù)一定規(guī)律從UCS-2轉(zhuǎn)換得到的,從UCS-2到UTF-8之間有以下轉(zhuǎn)換關(guān)系:
UCS-2 UTF-8
U+0000 - U+007F 0xxxxxxx
U+0080 - U+07FF 110xxxxx 10xxxxxx
U+0800 - U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
2.數(shù)據(jù)結(jié)構(gòu)
(1)定義
數(shù)據(jù)結(jié)構(gòu)包括邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)缝其,邏輯結(jié)構(gòu)是對數(shù)據(jù)之間關(guān)系的描述挎塌,有時候也把邏輯結(jié)構(gòu)簡稱為數(shù)據(jù)結(jié)構(gòu)。
(2)邏輯結(jié)構(gòu)
有四種基本類型:集合結(jié)構(gòu)氏淑、線性結(jié)構(gòu)勃蜘、樹狀結(jié)構(gòu)和網(wǎng)絡(luò)結(jié)構(gòu)。
(3)物理結(jié)構(gòu)
①順序存儲:邏輯相鄰假残,物理相鄰
鏈?zhǔn)酱鎯Γ翰灰筮壿嬒噜彽慕Y(jié)點(diǎn)物理位置也相鄰缭贡,結(jié)點(diǎn)間的邏輯關(guān)系由附加的引用字段表示(指針域)。一個結(jié)點(diǎn)的引用字段往往指導(dǎo)下一個結(jié)點(diǎn)的存放位置辉懒。
②索引存儲:采用附加索引表的方式來存儲結(jié)點(diǎn)信息的一種存儲方式
③散列存儲:根據(jù)結(jié)點(diǎn)的關(guān)鍵字直接計算出該結(jié)點(diǎn)的存儲地址的一種存儲的方式(字典)阳惹,如哈希表。
④哈希表:哈希表就是一種以 鍵-值(key-indexed) 存儲數(shù)據(jù)的結(jié)構(gòu)眶俩,我們只要輸入待查找的值即key莹汤,即可查找到其對應(yīng)的值。
(4)常見的數(shù)據(jù)結(jié)構(gòu)
①線性表
線性表是最常用且最簡單的一種數(shù)據(jù)結(jié)構(gòu)颠印,它是n個數(shù)據(jù)元素的有限序列纲岭。
實(shí)現(xiàn)線性表的方式一般有兩種,一種是使用數(shù)組存儲線性表的元素线罕,即用一組連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素止潮。另一種是使用鏈表存儲線性表的元素,即用一組任意的存儲單元存儲線性表的數(shù)據(jù)元素(存儲單元可以是連續(xù)的钞楼,也可以是不連續(xù)的)喇闸。
②棧(后進(jìn)先出)
是只能在某一端插入和刪除的特殊線性表。它按照先進(jìn)后出的原則存儲數(shù)據(jù)询件,先進(jìn)入的數(shù)據(jù)被壓入棧底燃乍,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)宛琅。
訪問刻蟹、插入和刪除元素只能在棧頂進(jìn)行。
③隊列(先進(jìn)先出)
一種特殊的線性表嘿辟,它只允許在表的前端(front)進(jìn)行刪除操作座咆,而在表的后端(rear)進(jìn)行插入操作痢艺。進(jìn)行插入操作的端稱為隊尾仓洼,進(jìn)行刪除操作的端稱為隊頭介陶。隊列是按照“先進(jìn)先出”或“后進(jìn)后出”的原則組織數(shù)據(jù)的。隊列中沒有元素時色建,稱為空隊列哺呜。
元素只能從隊列尾插入,從隊列頭訪問和刪除箕戳。
④樹
樹型結(jié)構(gòu)是一類非常重要的非線性數(shù)據(jù)結(jié)構(gòu)某残,其中以樹和二叉樹最為常用腺逛。
樹 是由n(n>=1)個有限節(jié)點(diǎn)組成一個具有層次關(guān)系的集合背犯。它具有以下特點(diǎn):每個節(jié)點(diǎn)有零個或多個子節(jié)點(diǎn);沒有父節(jié)點(diǎn)的節(jié)點(diǎn)稱為 根 節(jié)點(diǎn)逻杖;每一個非根節(jié)點(diǎn)有且只有一個 父節(jié)點(diǎn) **壮虫;除了根節(jié)點(diǎn)外澳厢,每個子節(jié)點(diǎn)可以分為多個不相交的子樹。
二叉樹
二叉樹是每個結(jié)點(diǎn)最多有兩個子樹的樹結(jié)構(gòu)囚似。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)剩拢,二叉樹的子樹有左右之分,次序不能顛倒饶唤。二叉樹常被用于實(shí)現(xiàn)二叉查找樹和二叉堆徐伐。
樹和二叉樹的主要差別:
樹中結(jié)點(diǎn)的最大度數(shù)沒有限制,而二叉樹結(jié)點(diǎn)的最大度數(shù)為2募狂;
樹的結(jié)點(diǎn)無左办素、右之分,而二叉樹的結(jié)點(diǎn)有左祸穷、右之分性穿。
⑤圖
圖是由結(jié)點(diǎn)的有窮集合V和邊的集合E組成。其中粱哼,為了與樹形結(jié)構(gòu)加以區(qū)別季二,在圖結(jié)構(gòu)中常常將結(jié)點(diǎn)稱為頂點(diǎn),邊是頂點(diǎn)的有序偶對揭措,若兩個頂點(diǎn)之間存在一條邊胯舷,就表示這兩個頂點(diǎn)具有相鄰關(guān)系。
圖是一種較線性表和樹更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)绊含,在線性表中桑嘶,數(shù)據(jù)元素之間僅有線性關(guān)系,在樹形結(jié)構(gòu)中躬充,數(shù)據(jù)元素之間有著明顯的層次關(guān)系逃顶,而在圖形結(jié)構(gòu)中讨便,節(jié)點(diǎn)之間的關(guān)系可以是任意的,圖中任意兩個數(shù)據(jù)元素之間都可能相關(guān)以政。
3.算法
(1)簡介
算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述霸褒,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制盈蛮。也就是說废菱,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時間內(nèi)獲得所要求的輸出抖誉。如果一個算法有缺陷殊轴,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題袒炉。不同的算法可能用不同的時間旁理、空間或效率來完成同樣的任務(wù)。一個算法的優(yōu)劣可以用空間復(fù)雜度與時間復(fù)雜度來衡量我磁。
(2)一個算法應(yīng)該具有以下五個重要的特征:
①輸入項 一個算法有0個或多個輸入孽文,以刻畫運(yùn)算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件
②輸出項 一個算法有一個或多個輸出十性,以反映對輸入數(shù)據(jù)加工后的結(jié)果叛溢。沒有輸出的算法是毫無意義的
③有窮性 算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止
④確切性 算法每個步驟都應(yīng)被精確定義,同樣的輸入只能有一種輸出
⑤可行性 算法中執(zhí)行的任何計算步驟都是可以被分解為基本的可執(zhí)行的操作步,即每個計算步都可以在有限時間內(nèi)完成(也稱之為有效性)
(3)算法的設(shè)計原則:
①正確性:首先劲适,算法應(yīng)當(dāng)滿足以特定的“規(guī)則說明”方式給出的需求楷掉。其次,對算法是否“正確”的理解可以有以下四個層次:
a.程序語法錯誤霞势。
b.程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足需要的結(jié)果烹植。
c.程序?qū)τ诰倪x擇的、典型愕贡、苛刻切帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果草雕。
d.程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能得到滿足要求的結(jié)果。
PS:通常以第c層意義的正確性作為衡量一個算法是否合格的標(biāo)準(zhǔn)固以。
②可讀性:算法為了人的閱讀與交流墩虹,其次才是計算機(jī)執(zhí)行。因此算法應(yīng)該易于人的理解憨琳;另一方面诫钓,晦澀難懂的程序易于隱藏較多的錯誤而難以調(diào)試。
③健壯性:當(dāng)輸入的數(shù)據(jù)非法時篙螟,算法應(yīng)當(dāng)恰當(dāng)?shù)淖龀龇磻?yīng)或進(jìn)行相應(yīng)處理菌湃,而不是產(chǎn)生莫名其妙的輸出結(jié)果。并且遍略,處理出錯的方法不應(yīng)是中斷程序執(zhí)行惧所,而是應(yīng)當(dāng)返回一個表示錯誤或錯誤性質(zhì)的值骤坐,以便在更高的抽象層次上進(jìn)行處理。
④高效率與低存儲量需求:通常算法效率值得是算法執(zhí)行時間下愈;存儲量是指算法執(zhí)行過程中所需要的最大存儲空間纽绍,兩者都與問題的規(guī)模有關(guān)。
同一問題可用不同算法解決驰唬,而一個算法的質(zhì)量優(yōu)劣將影響到算法乃至程序的效率顶岸。算法分析的目的在于選擇合適算法和改進(jìn)算法。一個算法的評價主要從時間復(fù)雜度和空間復(fù)雜度來考慮叫编。
(4)算法的時間復(fù)雜度與空間復(fù)雜度
①時間復(fù)雜度
算法的時間復(fù)雜度是指執(zhí)行算法所需要的計算工作量。一般來說霹抛,計算機(jī)算法是問題規(guī)模n 的函數(shù)f(n)搓逾,算法的時間復(fù)雜度也因此記做T(n)=Ο(f(n))。 因此杯拐,問題的規(guī)模n 越大霞篡,算法執(zhí)行的時間的增長率與f(n) 的增長率正相關(guān),稱作漸進(jìn)時間復(fù)雜度(Asymptotic Time Complexity)端逼。
②空間復(fù)雜度
算法的空間復(fù)雜度是指算法需要消耗的內(nèi)存空間朗兵。其計算和表示方法與時間復(fù)雜度類似,一般都用復(fù)雜度的漸近性來表示顶滩。同時間復(fù)雜度相比余掖,空間復(fù)雜度的分析要簡單得多。
(5)算法舉例
遞推法礁鲁、遞歸法盐欺、窮舉法、貪心算法仅醇、分治法冗美、動態(tài)規(guī)劃法、迭代法析二、分支界限法粉洼、回溯法。
4.數(shù)據(jù)庫
(1)數(shù)據(jù)庫簡介
數(shù)據(jù)庫:就是數(shù)據(jù)的倉庫叶摄,它是長期存儲在計算機(jī)內(nèi)属韧,有組織的、可共享的數(shù)據(jù)的集合准谚。
數(shù)據(jù)庫管理系統(tǒng)(DBMS: 用來對數(shù)據(jù)進(jìn)行存儲挫剑、管理等操作的軟件)
(2)數(shù)據(jù)庫分類
數(shù)據(jù)庫通常分為層次式數(shù)據(jù)庫、網(wǎng)絡(luò)式數(shù)據(jù)庫和關(guān)系式數(shù)據(jù)庫三種柱衔。而不同的數(shù)據(jù)庫是按不同的數(shù)據(jù)結(jié)構(gòu)來聯(lián)系和組織的樊破。而在當(dāng)今的互聯(lián)網(wǎng)中愉棱,最常見的數(shù)據(jù)庫模型主要是兩種,即關(guān)系型數(shù)據(jù)庫(SQL)和非關(guān)系型數(shù)據(jù)庫(NoSQL哲戚,Not Only SQL)奔滑。
(3)常見數(shù)據(jù)庫簡介
關(guān)系型數(shù)據(jù)庫與實(shí)例
關(guān)系型數(shù)據(jù)庫是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,而關(guān)系模型是由二維表及其聯(lián)系組成的數(shù)據(jù)組織顺少。
優(yōu)點(diǎn):
①易于維護(hù):都是使用表結(jié)構(gòu)朋其,格式一致;
②使用方便:SQL語言通用脆炎,可用于復(fù)雜查詢梅猿;
③復(fù)雜操作:支持SQL,可用于一個表以及多個表之間非常復(fù)雜的查詢秒裕。
缺點(diǎn):
①讀寫性能比較差袱蚓,尤其是海量數(shù)據(jù)的高效率讀寫;
②固定的表結(jié)構(gòu)几蜻,靈活度稍欠喇潘;
③高并發(fā)讀寫需求,傳統(tǒng)關(guān)系型數(shù)據(jù)庫來說梭稚,硬盤I/O是一個很大的瓶頸颖低。
目前主流的關(guān)系型數(shù)據(jù)庫有——
MYSQL
目前使用最廣泛的開源、多平臺的關(guān)系型數(shù)據(jù)庫弧烤,支持事務(wù)忱屑、符合ACID、支持多數(shù)SQL規(guī)范
SQL Server
支持事務(wù)扼褪、符合ACID想幻、支持多數(shù)SQL規(guī)范,屬于商業(yè)軟件话浇,需要注意版權(quán)和licence授權(quán)費(fèi)用
Oracle
支持事務(wù)脏毯,符合關(guān)系型數(shù)據(jù)庫原理,符合ACID幔崖,支持多數(shù)SQL規(guī)范食店,功能最強(qiáng)大、最復(fù)雜赏寇、市場占比最高的商業(yè)數(shù)據(jù)庫
Postgresql
開源吉嫩、多平臺、關(guān)系型數(shù)據(jù)庫嗅定,功能最強(qiáng)大的開源數(shù)據(jù)庫自娩,需要python環(huán)境,基于postgresql的TimeScaleDB渠退,是目前比較火的時序數(shù)據(jù)庫之一忙迁。
非關(guān)系型數(shù)據(jù)庫與實(shí)例
非關(guān)系型數(shù)據(jù)庫也稱為NOSQL(Not Only SQL)脐彩,作為關(guān)系型數(shù)據(jù)庫的一個補(bǔ)充,能在特定場景和特點(diǎn)問題下發(fā)揮高效率和高性能姊扔。
常見的非關(guān)系型數(shù)據(jù)庫類型有鍵值(Key-Value)存儲數(shù)據(jù)庫和面向文檔數(shù)據(jù)庫(Document-oriented)
鍵值存儲數(shù)據(jù)庫類似hash惠奸,通過key做添加、刪除恰梢、查詢佛南,性能高,優(yōu)勢在于簡單嵌言、易部署嗅回、高并發(fā),主要產(chǎn)品有
Redis
開源呀页、Linux平臺妈拌、key-value鍵值型Nosql數(shù)據(jù)庫,簡單穩(wěn)定蓬蝶,非常主流的、全數(shù)據(jù)in-momory猜惋、定位于“快”的鍵值型nosql數(shù)據(jù)庫
Memcaced
一個開源的丸氛、高性能的、具有分布式內(nèi)存對象的緩存系統(tǒng)著摔,通過它可以減輕數(shù)據(jù)庫負(fù)載缓窜,加速動態(tài)的web應(yīng)用
面向文檔數(shù)據(jù)庫以文檔的形式存儲,每個文檔是一系列數(shù)據(jù)項的集合谍咆,每個數(shù)據(jù)項有名稱與對應(yīng)的值禾锤,主要產(chǎn)品有
MongoDB
開源、多平臺摹察、文檔型nosql數(shù)據(jù)庫恩掷,“最像關(guān)系型數(shù)據(jù)庫”,定位于“靈活”的nosql數(shù)據(jù)庫供嚎。適用于網(wǎng)站后臺數(shù)據(jù)庫(更新快黄娘、實(shí)時復(fù)制)、小文件系統(tǒng)(json克滴,二進(jìn)制)逼争、日志分析系統(tǒng)(數(shù)據(jù)量大的文件)