基本含義NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。NoSQLNoSQL數(shù)據(jù)庫的四大分類鍵值(Key-Value)存儲(chǔ)數(shù)據(jù)庫這一類數(shù)據(jù)庫主要會(huì)使用到一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)。Key/value模型對(duì)于IT系統(tǒng)來說的優(yōu)勢(shì)在于簡單、易部署。但是如果DBA只對(duì)部分值進(jìn)行查詢或更新的時(shí)候,Key/value就顯得效率低下了。[3] 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.列存儲(chǔ)數(shù)據(jù)庫。這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對(duì)分布式存儲(chǔ)的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點(diǎn)是指向了多個(gè)列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.文檔型數(shù)據(jù)庫文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲(chǔ)相類似。該類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級(jí)版,允許之間嵌套鍵值。而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高。如:CouchDB, MongoDb. 國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB,已經(jīng)開源。圖形(Graph)數(shù)據(jù)庫圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型,并且能夠擴(kuò)展到多個(gè)服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。[2] 如:Neo4J, InfoGrid, Infinite Graph.因此,我們總結(jié)NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1、數(shù)據(jù)模型比較簡單;2、需要靈活性更強(qiáng)的IT系統(tǒng);3、對(duì)數(shù)據(jù)庫性能要求較高;4、不需要高度的數(shù)據(jù)一致性;5、對(duì)于給定key,比較容易映射復(fù)雜值的環(huán)境。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供新榮網(wǎng)站建設(shè)、新榮做網(wǎng)站、新榮網(wǎng)站設(shè)計(jì)、新榮網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、新榮企業(yè)網(wǎng)站模板建站服務(wù),10年新榮做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
只要字段值還可以繼續(xù)拆分,就不滿足第一范式。
范式設(shè)計(jì)得越詳細(xì),對(duì)某些實(shí)際操作可能會(huì)更好,但并非都有好處,需要對(duì)項(xiàng)目的實(shí)際情況進(jìn)行設(shè)定。
在滿足第一范式的前提下,其他列都必須完全依賴于主鍵列。 如果出現(xiàn)不完全依賴,只可能發(fā)生在聯(lián)合主鍵的情況下:
實(shí)際上,在這張訂單表中,product_name 只依賴于 product_id ,customer_name 只依賴于 customer_id。也就是說,product_name 和 customer_id 是沒用關(guān)系的,customer_name 和 product_id 也是沒有關(guān)系的。
這就不滿足第二范式:其他列都必須完全依賴于主鍵列!
拆分之后,myorder 表中的 product_id 和 customer_id 完全依賴于 order_id 主鍵,而 product 和 customer 表中的其他字段又完全依賴于主鍵。滿足了第二范式的設(shè)計(jì)!
在滿足第二范式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關(guān)系。
表中的 customer_phone 有可能依賴于 order_id 、 customer_id 兩列,也就不滿足了第三范式的設(shè)計(jì):其他列之間不能有傳遞依賴關(guān)系。
修改后就不存在其他列之間的傳遞依賴關(guān)系,其他列都只依賴于主鍵列,滿足了第三范式的設(shè)計(jì)!
查詢每門課的平均成績。
查詢 score 表中至少有 2 名學(xué)生選修,并以 3 開頭的課程的平均分?jǐn)?shù)。
分析表發(fā)現(xiàn),至少有 2 名學(xué)生選修的課程是 3-105 、3-245 、6-166 ,以 3 開頭的課程是 3-105 、3-245。也就是說,我們要查詢所有 3-105 和 3-245 的 degree 平均分。
查詢所有學(xué)生的 name,以及該學(xué)生在 score 表中對(duì)應(yīng)的 c_no 和 degree 。
通過分析可以發(fā)現(xiàn),只要把 score 表中的 s_no 字段值替換成 student 表中對(duì)應(yīng)的 name 字段值就可以了,如何做呢?
查詢所有學(xué)生的 no 、課程名稱 ( course 表中的 name ) 和成績 ( score 表中的 degree ) 列。
只有 score 關(guān)聯(lián)學(xué)生的 no ,因此只要查詢 score 表,就能找出所有和學(xué)生相關(guān)的 no 和 degree :
然后查詢 course 表:
只要把 score 表中的 c_no 替換成 course 表中對(duì)應(yīng)的 name 字段值就可以了。
查詢所有學(xué)生的 name 、課程名 ( course 表中的 name ) 和 degree 。
只有 score 表中關(guān)聯(lián)學(xué)生的學(xué)號(hào)和課堂號(hào),我們只要圍繞著 score 這張表查詢就好了。
只要把 s_no 和 c_no 替換成 student 和 srouse 表中對(duì)應(yīng)的 name 字段值就好了。
首先把 s_no 替換成 student 表中的 name 字段:
再把 c_no 替換成 course 表中的 name 字段:
查詢 95031 班學(xué)生每門課程的平均成績。
在 score 表中根據(jù) student 表的學(xué)生編號(hào)篩選出學(xué)生的課堂號(hào)和成績:
這時(shí)只要將 c_no 分組一下就能得出 95031 班學(xué)生每門課的平均成績:
查詢?cè)?3-105 課程中,所有成績高于 109 號(hào)同學(xué)的記錄。
首先篩選出課堂號(hào)為 3-105 ,在找出所有成績高于 109 號(hào)同學(xué)的的行。
查詢所有成績高于 109 號(hào)同學(xué)的 3-105 課程成績記錄。
查詢所有和 101 、108 號(hào)學(xué)生同年出生的 no 、name 、birthday 列。
查詢 '張旭' 教師任課的學(xué)生成績表。
首先找到教師編號(hào):
通過 sourse 表找到該教師課程號(hào):
通過篩選出的課程號(hào)查詢成績表:
查詢某選修課程多于5個(gè)同學(xué)的教師姓名。
首先在 teacher 表中,根據(jù) no 字段來判斷該教師的同一門課程是否有至少5名學(xué)員選修:
查看和教師編號(hào)有有關(guān)的表的信息:
我們已經(jīng)找到和教師編號(hào)有關(guān)的字段就在 course 表中,但是還無法知道哪門課程至少有5名學(xué)生選修,所以還需要根據(jù) score 表來查詢:
根據(jù)篩選出來的課程號(hào),找出在某課程中,擁有至少5名學(xué)員的教師編號(hào):
在 teacher 表中,根據(jù)篩選出來的教師編號(hào)找到教師姓名:
查詢 “計(jì)算機(jī)系” 課程的成績表。
思路是,先找出 course 表中所有 計(jì)算機(jī)系 課程的編號(hào),然后根據(jù)這個(gè)編號(hào)查詢 score 表。
查詢 計(jì)算機(jī)系 與 電子工程系 中的不同職稱的教師。
查詢課程 3-105 且成績 至少 高于 3-245 的 score 表。
查詢課程 3-105 且成績高于 3-245 的 score 表。
查詢某課程成績比該課程平均成績低的 score 表。
查詢所有任課 ( 在 course 表里有課程 ) 教師的 name 和 department 。
查詢 student 表中至少有 2 名男生的 class 。
查詢 student 表中不姓 "王" 的同學(xué)記錄。
查詢 student 表中每個(gè)學(xué)生的姓名和年齡。
查詢 student 表中最大和最小的 birthday 值。
以 class 和 birthday 從大到小的順序查詢 student 表。
查詢 "男" 教師及其所上的課程。
查詢最高分同學(xué)的 score 表。
查詢和 "李軍" 同性別的所有同學(xué) name 。
查詢和 "李軍" 同性別且同班的同學(xué) name 。
查詢所有選修 "計(jì)算機(jī)導(dǎo)論" 課程的 "男" 同學(xué)成績表。
需要的 "計(jì)算機(jī)導(dǎo)論" 和性別為 "男" 的編號(hào)可以在 course 和 student 表中找到。
建立一個(gè) grade 表代表學(xué)生的成績等級(jí),并插入數(shù)據(jù):
查詢所有學(xué)生的 s_no 、c_no 和 grade 列。
思路是,使用區(qū)間 ( BETWEEN ) 查詢,判斷學(xué)生的成績 ( degree ) 在 grade 表的 low 和 upp 之間。
準(zhǔn)備用于測(cè)試連接查詢的數(shù)據(jù):
分析兩張表發(fā)現(xiàn),person 表并沒有為 cardId 字段設(shè)置一個(gè)在 card 表中對(duì)應(yīng)的 id 外鍵。如果設(shè)置了的話,person 中 cardId 字段值為 6 的行就插不進(jìn)去,因?yàn)樵?cardId 值在 card 表中并沒有。
要查詢這兩張表中有關(guān)系的數(shù)據(jù),可以使用 INNER JOIN ( 內(nèi)連接 ) 將它們連接在一起。
完整顯示左邊的表 ( person ) ,右邊的表如果符合條件就顯示,不符合則補(bǔ) NULL 。
完整顯示右邊的表 ( card ) ,左邊的表如果符合條件就顯示,不符合則補(bǔ) NULL 。
完整顯示兩張表的全部數(shù)據(jù)。
在 MySQL 中,事務(wù)其實(shí)是一個(gè)最小的不可分割的工作單元。事務(wù)能夠 保證一個(gè)業(yè)務(wù)的完整性 。
比如我們的銀行轉(zhuǎn)賬:
在實(shí)際項(xiàng)目中,假設(shè)只有一條 SQL 語句執(zhí)行成功,而另外一條執(zhí)行失敗了,就會(huì)出現(xiàn)數(shù)據(jù)前后不一致。
因此,在執(zhí)行多條有關(guān)聯(lián) SQL 語句時(shí), 事務(wù) 可能會(huì)要求這些 SQL 語句要么同時(shí)執(zhí)行成功,要么就都執(zhí)行失敗。
在 MySQL 中,事務(wù)的 自動(dòng)提交 狀態(tài)默認(rèn)是開啟的。
自動(dòng)提交的作用 :當(dāng)我們執(zhí)行一條 SQL 語句的時(shí)候,其產(chǎn)生的效果就會(huì)立即體現(xiàn)出來,且不能 回滾 。
什么是回滾?舉個(gè)例子:
可以看到,在執(zhí)行插入語句后數(shù)據(jù)立刻生效,原因是 MySQL 中的事務(wù)自動(dòng)將它 提交 到了數(shù)據(jù)庫中。那么所謂 回滾 的意思就是,撤銷執(zhí)行過的所有 SQL 語句,使其回滾到 最后一次提交 數(shù)據(jù)時(shí)的狀態(tài)。
在 MySQL 中使用 ROLLBACK 執(zhí)行回滾:
由于所有執(zhí)行過的 SQL 語句都已經(jīng)被提交過了,所以數(shù)據(jù)并沒有發(fā)生回滾。那如何讓數(shù)據(jù)可以發(fā)生回滾?
將自動(dòng)提交關(guān)閉后,測(cè)試數(shù)據(jù)回滾:
那如何將虛擬的數(shù)據(jù)真正提交到數(shù)據(jù)庫中?使用 COMMIT :
事務(wù)的實(shí)際應(yīng)用 ,讓我們?cè)倩氐姐y行轉(zhuǎn)賬項(xiàng)目:
這時(shí)假設(shè)在轉(zhuǎn)賬時(shí)發(fā)生了意外,就可以使用 ROLLBACK 回滾到最后一次提交的狀態(tài):
這時(shí)我們又回到了發(fā)生意外之前的狀態(tài),也就是說,事務(wù)給我們提供了一個(gè)可以反悔的機(jī)會(huì)。假設(shè)數(shù)據(jù)沒有發(fā)生意外,這時(shí)可以手動(dòng)將數(shù)據(jù)真正提交到數(shù)據(jù)表中:COMMIT 。
事務(wù)的默認(rèn)提交被開啟 ( @@AUTOCOMMIT = 1 ) 后,此時(shí)就不能使用事務(wù)回滾了。但是我們還可以手動(dòng)開啟一個(gè)事務(wù)處理事件,使其可以發(fā)生回滾:
仍然使用 COMMIT 提交數(shù)據(jù),提交后無法再發(fā)生本次事務(wù)的回滾。
事務(wù)的四大特征:
事務(wù)的隔離性可分為四種 ( 性能從低到高 ) :
查看當(dāng)前數(shù)據(jù)庫的默認(rèn)隔離級(jí)別:
修改隔離級(jí)別:
測(cè)試 READ UNCOMMITTED ( 讀取未提交 ) 的隔離性:
由于小明的轉(zhuǎn)賬是在新開啟的事務(wù)上進(jìn)行操作的,而該操作的結(jié)果是可以被其他事務(wù)(另一方的淘寶店)看見的,因此淘寶店的查詢結(jié)果是正確的,淘寶店確認(rèn)到賬。但就在這時(shí),如果小明在它所處的事務(wù)上又執(zhí)行了 ROLLBACK 命令,會(huì)發(fā)生什么?
這就是所謂的 臟讀 ,一個(gè)事務(wù)讀取到另外一個(gè)事務(wù)還未提交的數(shù)據(jù)。這在實(shí)際開發(fā)中是不允許出現(xiàn)的。
把隔離級(jí)別設(shè)置為 READ COMMITTED :
這樣,再有新的事務(wù)連接進(jìn)來時(shí),它們就只能查詢到已經(jīng)提交過的事務(wù)數(shù)據(jù)了。但是對(duì)于當(dāng)前事務(wù)來說,它們看到的還是未提交的數(shù)據(jù),例如:
但是這樣還有問題,那就是假設(shè)一個(gè)事務(wù)在操作數(shù)據(jù)時(shí),其他事務(wù)干擾了這個(gè)事務(wù)的數(shù)據(jù)。例如:
雖然 READ COMMITTED 讓我們只能讀取到其他事務(wù)已經(jīng)提交的數(shù)據(jù),但還是會(huì)出現(xiàn)問題,就是 在讀取同一個(gè)表的數(shù)據(jù)時(shí),可能會(huì)發(fā)生前后不一致的情況。* 這被稱為* 不可重復(fù)讀現(xiàn)象 ( READ COMMITTED ) 。
將隔離級(jí)別設(shè)置為 REPEATABLE READ ( 可被重復(fù)讀取 ) :
測(cè)試 REPEATABLE READ ,假設(shè)在兩個(gè)不同的連接上分別執(zhí)行 START TRANSACTION :
當(dāng)前事務(wù)開啟后,沒提交之前,查詢不到,提交后可以被查詢到。但是,在提交之前其他事務(wù)被開啟了,那么在這條事務(wù)線上,就不會(huì)查詢到當(dāng)前有操作事務(wù)的連接。相當(dāng)于開辟出一條單獨(dú)的線程。
無論小張是否執(zhí)行過 COMMIT ,在小王這邊,都不會(huì)查詢到小張的事務(wù)記錄,而是只會(huì)查詢到自己所處事務(wù)的記錄:
這是 因?yàn)樾⊥踉诖酥伴_啟了一個(gè)新的事務(wù) ( START TRANSACTION ) * ,那么* 在他的這條新事務(wù)的線上,跟其他事務(wù)是沒有聯(lián)系的 ,也就是說,此時(shí)如果其他事務(wù)正在操作數(shù)據(jù),它是不知道的。
然而事實(shí)是,在真實(shí)的數(shù)據(jù)表中,小張已經(jīng)插入了一條數(shù)據(jù)。但是小王此時(shí)并不知道,也插入了同一條數(shù)據(jù),會(huì)發(fā)生什么呢?
報(bào)錯(cuò)了,操作被告知已存在主鍵為 6 的字段。這種現(xiàn)象也被稱為 幻讀,一個(gè)事務(wù)提交的數(shù)據(jù),不能被其他事務(wù)讀取到 。
顧名思義,就是所有事務(wù)的 寫入操作 全都是串行化的。什么意思?把隔離級(jí)別修改成 SERIALIZABLE :
還是拿小張和小王來舉例:
此時(shí)會(huì)發(fā)生什么呢?由于現(xiàn)在的隔離級(jí)別是 SERIALIZABLE ( 串行化 ) ,串行化的意思就是:假設(shè)把所有的事務(wù)都放在一個(gè)串行的隊(duì)列中,那么所有的事務(wù)都會(huì)按照 固定順序執(zhí)行 ,執(zhí)行完一個(gè)事務(wù)后再繼續(xù)執(zhí)行下一個(gè)事務(wù)的 寫入操作 ( 這意味著隊(duì)列中同時(shí)只能執(zhí)行一個(gè)事務(wù)的寫入操作 ) 。
根據(jù)這個(gè)解釋,小王在插入數(shù)據(jù)時(shí),會(huì)出現(xiàn)等待狀態(tài),直到小張執(zhí)行 COMMIT 結(jié)束它所處的事務(wù),或者出現(xiàn)等待超時(shí)。
轉(zhuǎn)載:
網(wǎng)絡(luò)即時(shí)通信系統(tǒng)是為用戶開發(fā)研制的,用戶是系統(tǒng)的最終使用者和評(píng)價(jià)者,所以在網(wǎng)絡(luò)通信系統(tǒng)的開發(fā)設(shè)計(jì)的過程中,我們樹立了從用戶的尋求出發(fā),面向用戶,一切為了用戶的觀念,在分析與設(shè)計(jì)系統(tǒng)的前期,為了保證系統(tǒng)的功能的完善多次尋求周圍同學(xué)和老師的意見,了解他們的要求,依照功能完善,界面美觀,操作簡單的原則進(jìn)行設(shè)計(jì) 。
嚴(yán)格按階段進(jìn)行
系統(tǒng)的開發(fā)設(shè)計(jì)是一項(xiàng)較大的工程,所以應(yīng)該將整個(gè)系統(tǒng)的開發(fā)設(shè)計(jì)過程劃分為若干階段,相應(yīng)的階段又要分為若干個(gè)不同的步驟,每個(gè)階段和步驟都要有明確的工作任務(wù)和目標(biāo)。這種有序的組織安排,條例清楚、層次分明,便于計(jì)劃的制定和控制,并且為后續(xù)工作的進(jìn)行奠定了堅(jiān)實(shí)的基礎(chǔ),提高了工作效率和質(zhì)量。
采用系統(tǒng)的觀點(diǎn)處理
在系統(tǒng)分析階段,在對(duì)原系統(tǒng)進(jìn)行全面調(diào)查和分析的基礎(chǔ)上,構(gòu)造系統(tǒng)的最佳邏輯模型,使用戶對(duì)將來完整系統(tǒng)的輪廓有個(gè)初步的了解和認(rèn)識(shí),以便及時(shí)和用戶進(jìn)行交流和探討,不斷提高系統(tǒng)的完善性。在此基礎(chǔ)上進(jìn)行系統(tǒng)的物理實(shí)現(xiàn)和設(shè)計(jì),切實(shí)完成邏輯模型的具體功能。邏輯設(shè)計(jì)和物理實(shí)現(xiàn)二者是相輔相成、密不可分的,這樣使系統(tǒng)的設(shè)計(jì)更加穩(wěn)妥合理。
整個(gè)系統(tǒng)的設(shè)計(jì)主要采用快速原形法
快速原形法是信息系統(tǒng)設(shè)計(jì)的一個(gè)重要方法。它是根據(jù)用戶提出的需求,由用戶和開發(fā)者共同確定系統(tǒng)的基本要求和主要功能,并在一個(gè)較短的時(shí)間內(nèi)建立一個(gè)實(shí)驗(yàn)性的、簡單的信息系統(tǒng)模型,通過用戶不斷提出的意見和建議,對(duì)模型進(jìn)行不斷的修改和完善,直到用戶比較滿意為止,以便形成一個(gè)相對(duì)穩(wěn)定、較為理想的管理信息系統(tǒng)。該方法的主要優(yōu)點(diǎn)。
1.脈絡(luò)清楚,所有問題都圍繞一個(gè)模型展開,使彼此之間聯(lián)系緊密。
2.有助于發(fā)現(xiàn)用戶需求,通過對(duì)原形和用戶接觸,能夠啟發(fā)開發(fā)人員去挖掘問題,從而不斷的修正、完善,最終得到一個(gè)理想的系統(tǒng)。
3.系統(tǒng)開發(fā)效率高,此方法的開發(fā)周期短、使用靈活、容易修改,這對(duì)于管理體制不夠穩(wěn)定的系統(tǒng)更加適合。
4.系統(tǒng)的可擴(kuò)展性好,由于此方法是在原型應(yīng)用中不斷發(fā)展完善和修改的,所以有較強(qiáng)的擴(kuò)展性。
在進(jìn)行代碼設(shè)計(jì)時(shí),遵循了以下原則。
唯一性:在本系統(tǒng)中,每一個(gè)代碼都和系統(tǒng)中的每一個(gè)對(duì)象唯一確定。
標(biāo)準(zhǔn)性:主要體現(xiàn)在對(duì)程序文件名命名和對(duì)數(shù)據(jù)文件命名的標(biāo)準(zhǔn)化上,遵循簡單扼要,方便適用的原則。一目了然,無重復(fù)現(xiàn)象。為了系統(tǒng)維護(hù)人員便于進(jìn)行系統(tǒng)維護(hù),使用了統(tǒng)一的標(biāo)準(zhǔn)。
合理性:系統(tǒng)中代碼設(shè)計(jì)與編碼對(duì)象的分類相適應(yīng),以使代碼對(duì)編碼對(duì)象的分類據(jù)有標(biāo)志作用。
簡單性:在設(shè)計(jì)過程中采用Code-Behind代碼分離,使數(shù)據(jù)庫操作代碼和前端調(diào)用代碼分離,頁面修改容易。
適應(yīng)性:在代碼設(shè)計(jì)過程中,代碼反映了編碼對(duì)象的特點(diǎn),便于識(shí)別和記憶,使系統(tǒng)維護(hù)人員容易了解和掌握,便于進(jìn)行維護(hù)工作。
系統(tǒng)總體功能結(jié)構(gòu)
網(wǎng)絡(luò)通信系統(tǒng)包含以下主要功能。
用戶注冊(cè);用戶登錄;
查找好友;查看好友資料;
添加好友;
刪除好友;
發(fā)送消息;
發(fā)送文件.
數(shù)據(jù)庫表主要用來存放用戶的注冊(cè)信息和用戶的好友資料,可利用兩張數(shù)據(jù)庫表來 存放用戶信息和用戶好友的資料。包括用戶的號(hào)碼,昵稱,密碼,在線與否,ip地址,資料,頭像號(hào),性別,E-mail和籍貫等信息。其中,用戶昵稱和密碼是必需的字段;在線與否是由系統(tǒng)自動(dòng)設(shè)置的;其余的信息是可選的字段。
課題整體以JAVA為平臺(tái),采用Eclipse開發(fā)工具,并使用SQL Server 2000管理數(shù)據(jù)庫數(shù)據(jù)開發(fā)而成的基于Socket的集中式網(wǎng)絡(luò)通信系統(tǒng),系統(tǒng)采用客戶機(jī)/服務(wù)器(C/S)的模式設(shè)計(jì),是一個(gè)三層C/S結(jié)構(gòu),數(shù)據(jù)庫服務(wù)器、應(yīng)用程序服務(wù)器端 、應(yīng)用程序客戶端。系統(tǒng)采用C/S結(jié)構(gòu),可以將任務(wù)合理分配到客戶機(jī)端和服務(wù)器端 ,從而降低了系統(tǒng)的通信開銷。
客戶層。
客戶層是應(yīng)用程序的用戶接口部分,它擔(dān)負(fù)著用戶與應(yīng)用間的對(duì)話功能,用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù),為了直觀的進(jìn)行操作,客戶層需要使用圖形用戶接口,若聊天用戶變更,系統(tǒng)只需改寫顯示控制和數(shù)據(jù)檢查程序即可,而不會(huì)影響其他兩層。
服務(wù)層。(功能層)
服務(wù)層相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。在應(yīng)用設(shè)計(jì)中,必須避免在表示層和功能層之間進(jìn)行多次的數(shù)據(jù)交換,這就需要盡可能進(jìn)行一次性的業(yè)務(wù)處理達(dá)到優(yōu)化整體設(shè)計(jì)的目的。
數(shù)據(jù)層
數(shù)據(jù)層是DBMS,本系統(tǒng)使用了Microsoft 公司的SQL Ssever2000數(shù)據(jù)庫服務(wù)器來管理數(shù)據(jù)。SQL Ssever2000能迅速的執(zhí)行大量數(shù)據(jù)的更新和檢索,因此,從功能層傳送到數(shù)
據(jù)層的要求一般都使用SQL語言。
新聞標(biāo)題:nosql數(shù)據(jù)庫課程總結(jié),nosql數(shù)據(jù)庫實(shí)驗(yàn)心得
當(dāng)前網(wǎng)址:http://aaarwkj.com/article0/dsigiio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、用戶體驗(yàn)、全網(wǎng)營銷推廣、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)