答案:A
創(chuàng)新互聯(lián)服務(wù)項目包括清原網(wǎng)站建設(shè)、清原網(wǎng)站制作、清原網(wǎng)頁制作以及清原網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,清原網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到清原省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1.文檔型數(shù)據(jù)庫
作為最受歡迎的NoSQL產(chǎn)品,文檔型數(shù)據(jù)庫MongoDB當(dāng)仁不讓地占據(jù)了第一的位置,同時它也是所有NoSQL數(shù)據(jù)庫中排名最靠前的產(chǎn)品(總排行榜第七名)。Apache基金會的CouchDB排在第二,基于.Net的數(shù)據(jù)庫RavenDB排在第三,Couchbase排在第四。
2.鍵值(Key-value)數(shù)據(jù)庫
鍵值(Key-value)數(shù)據(jù)庫是NoSQL領(lǐng)域中應(yīng)用范圍最廣的,也是涉及產(chǎn)品最多的一種模型。從最簡單的BerkeleyDB到功能豐富的分布式數(shù)據(jù)庫Riak再到Amazon托管的DynamoDB不一而足。
在鍵值數(shù)據(jù)庫流行度排行中,Redis不出意外地排名第一,它是一款由Vmware支持的內(nèi)存數(shù)據(jù)庫,總體排名第十一。排在第二位的是Memcached,它在緩存系統(tǒng)中應(yīng)用十分廣泛。排在之后的是Riak、BerkeleyDB、SimpleDB、DynamoDB以及甲骨文的Oracle NoSQL數(shù)據(jù)庫。值得注意的是,Oracle NoSQL數(shù)據(jù)庫上榜不久,得分已經(jīng)翻番,上升勢頭非常迅猛。
3. 列式存儲
列式存儲被視為NoSQL數(shù)據(jù)庫中非常重要的一種模式,其中Cassandra流行度最高,它已經(jīng)由Facebook轉(zhuǎn)交給到Apache進行管理,同時Cassandra在全體數(shù)據(jù)庫排名中排在第十位,緊隨MongoDB成為第二受歡迎的NoSQL數(shù)據(jù)庫?;贖adoop的Hbase排在第二位,Hypertable排在第三。而Google的BigTable并未列入排名,原因是它并未正式公開。
NoSQL不像傳統(tǒng)關(guān)系型庫那樣有統(tǒng)一的標準,也不具有普適性。所以要根據(jù)應(yīng)用和數(shù)據(jù)的存取特征來選擇適合的NoSQL。
如果以前沒有接觸過NoSQL,MongoDB是一個比較好的選擇,他支持的所以和查詢能力是所有NoSQL中最強大的,缺點是索引的成本和文檔大小限制。
如果是使用Hadoop大數(shù)據(jù)分析,數(shù)據(jù)基本上不存在修改,只是插入和查詢,并且需要配合Hadoop的MR任務(wù),HBase會是很好的選擇。
如果要求有很強的擴展能力,高并發(fā)讀寫和維護方便,Casaandra則是不錯的選擇。
當(dāng)然除了上面三個流行的NoSQL,還有很多優(yōu)秀的NoSQL數(shù)據(jù)庫,而且他們都有各自擅長領(lǐng)域,所以需要了解你們產(chǎn)品自身的特點然后分析選擇哪種才是最適合的,往往在大型系統(tǒng)中不是單一的數(shù)據(jù)庫,而是使用多種數(shù)據(jù)庫組合。
mongodb hoodoop hbase 等?,F(xiàn)在都挺火的。目前京東,58,360都在使用mongodb。
企業(yè)應(yīng)用系統(tǒng)架構(gòu)優(yōu)化方法
系統(tǒng)優(yōu)化是一個全面而復(fù)雜的工作,很難通過某一方面的提升而獲得很好的效果,也很難在一朝一夕完成系統(tǒng)的全面優(yōu)化,每個系統(tǒng)都有其特性,需要綜合分析綜合考慮才能獲得比較好的效果。 我下面為大家整理了一些企業(yè)應(yīng)用系統(tǒng)架構(gòu)優(yōu)化的方法,歡迎閱讀參考:
1 實現(xiàn)動靜分離
所謂“動靜”分離,就是將靜態(tài)資源如圖片、CSS、Js等和動態(tài)資源如JSP、Servlet等進行分開的處理,通過使用不同的服務(wù)器,從而加快頁面的響應(yīng)速度,這是目前互聯(lián)網(wǎng)應(yīng)用最常用的方式之一,但是在企業(yè)應(yīng)用端相對應(yīng)用較少。
動靜分離至少有兩個方面的好處,一是提高了靜態(tài)資源的處理速度,因為應(yīng)用服務(wù)器處理靜態(tài)資源的速度—般都不如專業(yè)的web服務(wù)器,第二個好處就是減少了應(yīng)用服務(wù)器的負擔(dān),應(yīng)用服務(wù)器專注于處理動態(tài)請求,這對系統(tǒng)的穩(wěn)定運行是有很大的幫助的。
要實現(xiàn)動靜分離,有兩種方式,一種是在加載靜態(tài)資源的HTML語言中,將地址指定到不同的IP/域名上,實現(xiàn)徹底的分離。這種方式需要在設(shè)計之初進行考慮,并不適合優(yōu)化項目,因為這種修改會產(chǎn)生很大的工作量。第二種方式是通過分發(fā)器,攔截對靜態(tài)資源的訪問,將動態(tài)資源轉(zhuǎn)發(fā)給后端的應(yīng)用服務(wù)器,實現(xiàn)動靜分離。這種方式的好處是不需要改動現(xiàn)有的代碼,僅需要做部署方式故調(diào)整,增加web服務(wù)器進行靜態(tài)資源的處理。示意圖如下:
目前轉(zhuǎn)發(fā)器比較多,既有老牌的Apache Web Server、有性能卓越的Zeus,也有目前如日中天的Nainx,不同的項目可以按照各自的需求進行選擇。
2 使用緩存技術(shù)
緩存技術(shù)是巨型項目、超大型項目中最重要的技術(shù),范圍也比較廣,從前端的頁面、應(yīng)用中的數(shù)據(jù)、數(shù)據(jù)庫本身等均可以進行緩存,每個方面使用的技術(shù)也千差萬別。使用緩存可以帶來兩個方面的好處,一是緩存的數(shù)據(jù)可以被高速加載,從內(nèi)存中讀取數(shù)據(jù)比通過數(shù)據(jù)庫或磁盤讀取具有更好的效率;二是最重要的,減少了數(shù)據(jù)庫服務(wù)器的壓力,有利于數(shù)據(jù)庫的穩(wěn)定,數(shù)據(jù)庫可以使用更多的資源進行查詢、統(tǒng)計等工作,有利于提高系統(tǒng)的整體運行速度。對于大中型應(yīng)用而言,應(yīng)用中的數(shù)據(jù)緩存和數(shù)據(jù)庫端的緩存是應(yīng)該被考慮的。數(shù)據(jù)庫端的緩存在本文數(shù)據(jù)庫章節(jié)中進行描述,本節(jié)描述應(yīng)用中數(shù)據(jù)的緩存。
要使用緩存,首先需要明確緩存的'內(nèi)容。一般優(yōu)化項目不建議做全部數(shù)據(jù)緩存,或者使用內(nèi)存數(shù)據(jù)庫之類的技術(shù),這種修改工作量巨大,由此帶來的安全性、穩(wěn)定性、數(shù)據(jù)的一致性都可能存在較大的隱患。所以,緩存的內(nèi)容需要有所選擇,一般的說,應(yīng)該根據(jù)數(shù)據(jù)的數(shù)據(jù)量、被讀取的次數(shù)、增加/更新頻率進行選擇。如果數(shù)據(jù)較少、增加/更新頻率非常低,那么應(yīng)該考慮直接緩存在應(yīng)用服務(wù)器端,只有對于重要性較高、讀取次數(shù)較多、增加/更新頻率相對適中的數(shù)據(jù),才適合使用獨立緩存。 確定緩存的內(nèi)容之后,就應(yīng)該確定緩存的方式。對于緩存于應(yīng)用服務(wù)器端的資源,一般選擇KEY-ALUE(OBJECT)進行緩存。對于獨立緩存,其內(nèi)容也KEY-VALUE的格式進行存儲(如果使用內(nèi)存數(shù)據(jù)庫實現(xiàn)緩存,那么存儲的就是與數(shù)據(jù)庫相同的信息),VALUE可以選擇SON或者Java Object,其中JSON占用空間較少,讀取的網(wǎng)絡(luò)流量較少,讀取之后需要進行轉(zhuǎn)換為Java對象;JavaXCN占用空間較大,讀取的網(wǎng)絡(luò)流量會較多,讀取之后無需進行轉(zhuǎn)化(前提是要求該對象已經(jīng)系列化),不同系統(tǒng)可以各自特點進行選擇。
對于獨立緩存,接下來的工作是選擇緩存服務(wù)器,緩存服務(wù)器選擇需要具有一定的原則:是否滿足已經(jīng)確定的緩存方式、對操作系統(tǒng)要求如何、穩(wěn)定性如何、是否支持分布式、是否支持多節(jié)點熱備、客戶端(即JAVA調(diào)用接口)接口是否支持漂移(一個節(jié)點崩潰是否能轉(zhuǎn)移到另外的節(jié)點)、客戶端是否高效等等。從目前業(yè)界來看,memcached、redis都是應(yīng)用比較廣泛的緩存服務(wù)器。
選擇完緩存服務(wù)器之后,就需要對系統(tǒng)的代碼進行一定的改造。改造的內(nèi)容就是將通過數(shù)據(jù)庫讀取的信息改為從緩存服務(wù)器獲得,而對數(shù)據(jù)的保存、修改、刪除操作,既要操作數(shù)據(jù)庫上的數(shù)據(jù),也需要對緩存服務(wù)器的信息進行更新,如下圖所示:
由于是對系統(tǒng)的優(yōu)化,那么系統(tǒng)中已經(jīng)具有很多數(shù)據(jù)且并未進入緩存,因此還需要將緩存服務(wù)器中的數(shù)據(jù)進行初始化。有兩種方式來進行,一種方式是直接將數(shù)據(jù)庫中的數(shù)據(jù)一次性加載到緩存服務(wù)器,另外一種方式是在修改Load數(shù)據(jù)的方式,先從緩存服務(wù)器獲取,如果沒有,則從數(shù)據(jù)庫獲取,然后同步到緩存服務(wù)器上。對于優(yōu)化項目,建議使用第二種方式。第二種方式一個額外的好處就是當(dāng)緩存服務(wù)器全部不可用時,系統(tǒng)也能提供完整的服務(wù)。
3 使用異步日志記錄
對于企業(yè)應(yīng)用而言,對用戶的操作的記錄是很重要的,在系統(tǒng)出現(xiàn)某些問題的時候,可以通過日志進行數(shù)據(jù)恢復(fù)。一般系統(tǒng)要么沒有進行記錄,要么使用數(shù)據(jù)庫進行同步記錄。這部分數(shù)據(jù)會比較龐大,少則百萬級,多則數(shù)億,并且隨著使用量的增加而逐漸增加。這些表屬于使用率最高的表之一,在這些表上進行經(jīng)常性數(shù)據(jù)插入,有可能會變成系統(tǒng)的噩夢。
為了解決這個問題,引入異步日志記錄,是較為理想的選擇。通過在web容器中增加過濾器,攔截用戶的請求,然后將用戶的請求和表單數(shù)據(jù)封裝為JSON格式的數(shù)據(jù),采用異步方式發(fā)送到NoSQL數(shù)據(jù)庫,需要恢復(fù)的時候,通過對JSON數(shù)據(jù)進行還原。這種方式有如下好處:
1)不需要改動現(xiàn)有代碼而進行了用戶操作記錄;
2)由于采用異步模式,幾乎不會增加用戶操作的時間;
3)采用NoSQL+JSON存儲,不用為每一類操作特別設(shè)置特定的表結(jié)構(gòu),修改簡單。
目前的NoSQL數(shù)據(jù)庫也逐漸顯露頭角,根據(jù)DB Engines在今年10月發(fā)布的數(shù)據(jù)庫排名中,MongoDB的NoSQL服務(wù)器已經(jīng)躍居第七位,因此NoSQL服務(wù)器目前推薦使用MongoDB。
;