關(guān)于nosqlnodejs的信息

leveldb高性能nosql數(shù)據(jù)庫在node.js環(huán)境下如何使用及實(shí)例介紹

看了CNode社區(qū)的一篇文章,非常好,果斷轉(zhuǎn),a href=""想看點(diǎn)我/a

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比大方網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式大方網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋大方地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

mongodb怎樣安裝nodejs

mongodb是一個(gè)nosql數(shù)據(jù)庫。

nodejs是一門語言。

如果是在nodejs中要保存數(shù)據(jù)到mongodb中,需要先安裝mongodb模塊:

npm install mongodb

為什么要用nodejs

著作權(quán)歸作者所有。

商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

作者:FengqiAsia

鏈接:

來源:知乎

要講清楚這個(gè)問題,先講講整個(gè)Web應(yīng)用程序架構(gòu)(包括流量、處理器速度和內(nèi)存速度)中的瓶頸。瓶頸在于服務(wù)器能夠處理的并發(fā)連接的最大數(shù)量。Node.js解決這個(gè)問題的方法是:更改連接到服務(wù)器的方式。每個(gè)連接發(fā)射一個(gè)在Node.js引擎的進(jìn)程中運(yùn)行的事件,而不是為每個(gè)連接生成一個(gè)新的OS線程(并為其分配一些配套內(nèi)存)。Node.js不會(huì)死鎖,因?yàn)樗静辉试S使用鎖,它不會(huì)直接阻塞 I/O 調(diào)用。Node.js還宣稱,運(yùn)行它的服務(wù)器能支持?jǐn)?shù)萬個(gè)并發(fā)連接。

Node本身運(yùn)行V8 JavaScript。V8 JavaScript引擎是Google用于其Chrome瀏覽器的底層JavaScript引擎。Google使用V8創(chuàng)建了一個(gè)用C++編寫的超快解釋器,該解釋器擁有另一個(gè)獨(dú)特特征:您可以下載該引擎并將其嵌入任何應(yīng)用程序。V8 JavaScript引擎并不僅限于在一個(gè)瀏覽器中運(yùn)行。因此,Node.js實(shí)際上會(huì)使用Google編寫的V8 JavaScript引擎,并將其重建為可在服務(wù)器上使用。

Node.js優(yōu)點(diǎn):

1、采用事件驅(qū)動(dòng)、異步編程,為網(wǎng)絡(luò)服務(wù)而設(shè)計(jì)。其實(shí)Javascript的匿名函數(shù)和閉包特性非常適合事件驅(qū)動(dòng)、異步編程。而且JavaScript也簡單易學(xué),很多前端設(shè)計(jì)人員可以很快上手做后端設(shè)計(jì)。

2、Node.js非阻塞模式的IO處理給Node.js帶來在相對(duì)低系統(tǒng)資源耗用下的高性能與出眾的負(fù)載能力,非常適合用作依賴其它IO資源的中間層服務(wù)。3、Node.js輕量高效,可以認(rèn)為是數(shù)據(jù)密集型分布式部署環(huán)境下的實(shí)時(shí)應(yīng)用系統(tǒng)的完美解決方案。Node非常適合如下情況:在響應(yīng)客戶端之前,您預(yù)計(jì)可能有很高的流量,但所需的服務(wù)器端邏輯和處理不一定很多。

Node.js缺點(diǎn):

1、可靠性低

2、單進(jìn)程,單線程,只支持單核CPU,不能充分的利用多核CPU服務(wù)器。一旦這個(gè)進(jìn)程崩掉,那么整個(gè)web服務(wù)就崩掉了。

不過以上缺點(diǎn)可以可以通過代碼的健壯性來彌補(bǔ)。目前Node.js的網(wǎng)絡(luò)服務(wù)器有以下幾種支持多進(jìn)程的方式:

#1 開啟多個(gè)進(jìn)程,每個(gè)進(jìn)程綁定不同的端口,用反向代理服務(wù)器如 Nginx 做負(fù)載均衡,好處是我們可以借助強(qiáng)大的 Nginx 做一些過濾檢查之類的操作,同時(shí)能夠?qū)崿F(xiàn)比較好的均衡策略,但壞處也是顯而易見——我們引入了一個(gè)間接層。

#2 多進(jìn)程綁定在同一個(gè)端口偵聽。在Node.js中,提供了進(jìn)程間發(fā)送“文件句柄” 的功能,這個(gè)功能實(shí)在是太有用了(貌似是yahoo 的工程師提交的一個(gè)patch) ,不明真相的群眾可以看這里: Unix socket magic

#3 一個(gè)進(jìn)程負(fù)責(zé)監(jiān)聽、接收連接,然后把接收到的連接平均發(fā)送到子進(jìn)程中去處理。

在Node.js v0.5.10+ 中,內(nèi)置了cluster 庫,官方宣稱直接支持多進(jìn)程運(yùn)行方式。Node.js 官方為了讓API 接口傻瓜化,用了一些比較tricky的方法,代碼也比較繞。這種多進(jìn)程的方式,不可避免的要牽涉到進(jìn)程通信、進(jìn)程管理之類的東西。

此外,有兩個(gè)Node.js的module:multi-node 和 cluster ,采用的策略和以上介紹的類似,但使用這些module往往有一些缺點(diǎn):

#1 更新不及時(shí)

#2 復(fù)雜龐大,往往綁定了很多其他的功能,用戶往往被綁架

#3 遇到問題難以解決

Node表現(xiàn)出眾的典型示例包括:

1、RESTful API

提供RESTful API的Web服務(wù)接收幾個(gè)參數(shù),解析它們,組合一個(gè)響應(yīng),并返回一個(gè)響應(yīng)(通常是較少的文本)給用戶。這是適合Node的理想情況,因?yàn)槟梢詷?gòu)建它來處理數(shù)萬條連接。它仍然不需要大量邏輯;它本質(zhì)上只是從某個(gè)數(shù)據(jù)庫中查找一些值并將它們組成一個(gè)響應(yīng)。由于響應(yīng)是少量文本,入站請(qǐng)求也是少量的文本,因此流量不高,一臺(tái)機(jī)器甚至也可以處理最繁忙的公司的API需求。

2、Twitter隊(duì)列

想像一下像Twitter這樣的公司,它必須接收tweets并將其寫入數(shù)據(jù)庫。實(shí)際上,每秒幾乎有數(shù)千條tweet達(dá)到,數(shù)據(jù)庫不可能及時(shí)處理高峰時(shí)段所需的寫入數(shù)量。Node成為這個(gè)問題的解決方案的重要一環(huán)。如您所見,Node能處理數(shù)萬條入站tweet。它能快速而又輕松地將它們寫入一個(gè)內(nèi)存排隊(duì)機(jī)制(例如memcached),另一個(gè)單獨(dú)進(jìn)程可以從那里將它們寫入數(shù)據(jù)庫。Node在這里的角色是迅速收集tweet,并將這個(gè)信息傳遞給另一個(gè)負(fù)責(zé)寫入的進(jìn)程。想象一下另一種設(shè)計(jì)(常規(guī)PHP服務(wù)器會(huì)自己嘗試處理對(duì)數(shù)據(jù)庫本身的寫入):每個(gè)tweet都會(huì)在寫入數(shù)據(jù)庫時(shí)導(dǎo)致一個(gè)短暫的延遲,因?yàn)閿?shù)據(jù)庫調(diào)用正在阻塞通道。由于數(shù)據(jù)庫延遲,一臺(tái)這樣設(shè)計(jì)的機(jī)器每秒可能只能處理2000條入站tweet。每秒處理100萬條tweet則需要500個(gè)服務(wù)器。相反,Node能處理每個(gè)連接而不會(huì)阻塞通道,從而能夠捕獲盡可能多的tweets。一個(gè)能處理50000條tweet的Node機(jī)器僅需20臺(tái)服務(wù)器即可。

3、電子游戲統(tǒng)計(jì)數(shù)據(jù)

如果您在線玩過《使命召喚》這款游戲,當(dāng)您查看游戲統(tǒng)計(jì)數(shù)據(jù)時(shí),就會(huì)立即意識(shí)到一個(gè)問題:要生成那種級(jí)別的統(tǒng)計(jì)數(shù)據(jù),必須跟蹤海量信息。這樣,如果有數(shù)百萬玩家同時(shí)在線玩游戲,而且他們處于游戲中的不同位置,那么很快就會(huì)生成海量信息。Node是這種場(chǎng)景的一種很好的解決方案,因?yàn)樗懿杉螒蛏傻臄?shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行最少的合并,然后對(duì)數(shù)據(jù)進(jìn)行排隊(duì),以便將它們寫入數(shù)據(jù)庫。使用整個(gè)服務(wù)器來跟蹤玩家在游戲中發(fā)射了多少子彈看起來很愚蠢,如果您使用Apache這樣的服務(wù)器,可能會(huì)有一些有用的限制;但相反,如果您專門使用一個(gè)服務(wù)器來跟蹤一個(gè)游戲的所有統(tǒng)計(jì)數(shù)據(jù),就像使用運(yùn)行Node的服務(wù)器所做的那樣,那看起來似乎是一種明智之舉。

總的來說,Node.js的應(yīng)用場(chǎng)景

1) 適合

JSON APIs——構(gòu)建一個(gè)Rest/JSON API服務(wù),Node.js可以充分發(fā)揮其非阻塞IO模型以及JavaScript對(duì)JSON的功能支持(如JSON.stringfy函數(shù))

單頁面、多Ajax請(qǐng)求應(yīng)用——如Gmail,前端有大量的異步請(qǐng)求,需要服務(wù)后端有極高的響應(yīng)速度

基于Node.js開發(fā)Unix命令行工具——Node.js可以大量生產(chǎn)子進(jìn)程,并以流的方式輸出,這使得它非常適合做Unix命令行工具

流式數(shù)據(jù)——傳統(tǒng)的Web應(yīng)用,通常會(huì)將HTTP請(qǐng)求和響應(yīng)看成是原子事件。而Node.js會(huì)充分利用流式數(shù)據(jù)這個(gè)特點(diǎn),構(gòu)建非??岬膽?yīng)用。如實(shí)時(shí)文件上傳系統(tǒng)transloadit

準(zhǔn)實(shí)時(shí)應(yīng)用系統(tǒng)——如聊天系統(tǒng)、微博系統(tǒng),但Javascript是有垃圾回收機(jī)制的,這就意味著,系統(tǒng)的響應(yīng)時(shí)間是不平滑的(GC垃圾回收會(huì)導(dǎo)致系統(tǒng)這一時(shí)刻停止工作)。如果想要構(gòu)建硬實(shí)時(shí)應(yīng)用系統(tǒng),Erlang是個(gè)不錯(cuò)的選擇

2) 不適合

CPU使用率較重、IO使用率較輕的應(yīng)用——如視頻編碼、人工智能等,Node.js的優(yōu)勢(shì)無法發(fā)揮

簡單Web應(yīng)用——此類應(yīng)用的特點(diǎn)是,流量低、物理架構(gòu)簡單,Node.js無法提供像Ruby的Rails或者Python的Django這樣強(qiáng)大的框架

NoSQL + Node.js——如果僅僅是為了追求時(shí)髦,且自己對(duì)這兩門技術(shù)還未深入理解的情況下,不要冒險(xiǎn)將業(yè)務(wù)系統(tǒng)搭建在這兩個(gè)漂亮的名詞上,建議使用MySQL之類的傳統(tǒng)數(shù)據(jù)庫

如果系統(tǒng)可以匹配Node.js的適用場(chǎng)景,那么是時(shí)候采取具體的措施來說服老板了。

說服自己老板采用Node.js的方式

構(gòu)建一個(gè)簡單的原型——花一周時(shí)間構(gòu)建系統(tǒng)某一部分的原型是非常值得的,同時(shí)也很容易和老板在某一點(diǎn)達(dá)成一致,等到系統(tǒng)真的在某一部分應(yīng)用了Node.js,就是打開局面的時(shí)候

尋找開發(fā)者——首先JavaScript語言的普及度很高,一般公司都不乏Web前端工程師,而此類工程師的學(xué)習(xí)門檻也非常低。這就意味著Node.js很容易招人,或者公司就隱藏了一些高手

強(qiáng)大的社區(qū)支持——Node.js社區(qū)非?;钴S,吸引很多優(yōu)秀的工程師,這就意味著公司可以很容易從社區(qū)得到免費(fèi)或者付費(fèi)的支持

系統(tǒng)性能考慮——JavaScript引擎Google V8,加之原生異步IO模型,使得Node.js在性能的表現(xiàn)非常出色,處理數(shù)以千計(jì)的并發(fā)請(qǐng)求非常輕松

專業(yè)公司的支持——使用開源技術(shù)的最大問題是,原作者不承諾對(duì)其產(chǎn)品進(jìn)行技術(shù)支持或者質(zhì)量保證。現(xiàn)在Node.js已經(jīng)得到Joyent公司的贊助,這就保證了未來Node.js的發(fā)展是可持續(xù)性的

為什么要用nodejs服務(wù)

總的來說,Node.js的應(yīng)用場(chǎng)景

1) 適合

JSON APIs——構(gòu)建一個(gè)Rest/JSON API服務(wù),Node.js可以充分發(fā)揮其非阻塞IO模型以及JavaScript對(duì)JSON的功能支持(如JSON.stringfy函數(shù))

單頁面、多Ajax請(qǐng)求應(yīng)用——如Gmail,前端有大量的異步請(qǐng)求,需要服務(wù)后端有極高的響應(yīng)速度

基于Node.js開發(fā)Unix命令行工具——Node.js可以大量生產(chǎn)子進(jìn)程,并以流的方式輸出,這使得它非常適合做Unix命令行工具

流式數(shù)據(jù)——傳統(tǒng)的Web應(yīng)用,通常會(huì)將HTTP請(qǐng)求和響應(yīng)看成是原子事件。而Node.js會(huì)充分利用流式數(shù)據(jù)這個(gè)特點(diǎn),構(gòu)建非??岬膽?yīng)用。如實(shí)時(shí)文件上傳系統(tǒng)transloadit

準(zhǔn)實(shí)時(shí)應(yīng)用系統(tǒng)——如聊天系統(tǒng)、微博系統(tǒng),但Javascript是有垃圾回收機(jī)制的,這就意味著,系統(tǒng)的響應(yīng)時(shí)間是不平滑的(GC垃圾回收會(huì)導(dǎo)致系統(tǒng)這一時(shí)刻停止工作)。如果想要構(gòu)建硬實(shí)時(shí)應(yīng)用系統(tǒng),Erlang是個(gè)不錯(cuò)的選擇

2) 不適合

CPU使用率較重、IO使用率較輕的應(yīng)用——如視頻編碼、人工智能等,Node.js的優(yōu)勢(shì)無法發(fā)揮

簡單Web應(yīng)用——此類應(yīng)用的特點(diǎn)是,流量低、物理架構(gòu)簡單,Node.js無法提供像Ruby的Rails或者Python的Django這樣強(qiáng)大的框架

NoSQL + Node.js——如果僅僅是為了追求時(shí)髦,且自己對(duì)這兩門技術(shù)還未深入理解的情況下,不要冒險(xiǎn)將業(yè)務(wù)系統(tǒng)搭建在這兩個(gè)漂亮的名詞上,建議使用MySQL之類的傳統(tǒng)數(shù)據(jù)庫

如果系統(tǒng)可以匹配Node.js的適用場(chǎng)景,那么是時(shí)候采取具體的措施來說服老板了。

說服自己老板采用Node.js的方式

構(gòu)建一個(gè)簡單的原型——花一周時(shí)間構(gòu)建系統(tǒng)某一部分的原型是非常值得的,同時(shí)也很容易和老板在某一點(diǎn)達(dá)成一致,等到系統(tǒng)真的在某一部分應(yīng)用了Node.js,就是打開局面的時(shí)候

尋找開發(fā)者——首先JavaScript語言的普及度很高,一般公司都不乏Web前端工程師,而此類工程師的學(xué)習(xí)門檻也非常低。這就意味著Node.js很容易招人,或者公司就隱藏了一些高手

強(qiáng)大的社區(qū)支持——Node.js社區(qū)非常活躍,吸引很多優(yōu)秀的工程師,這就意味著公司可以很容易從社區(qū)得到免費(fèi)或者付費(fèi)的支持

系統(tǒng)性能考慮——JavaScript引擎Google V8,加之原生異步IO模型,使得Node.js在性能的表現(xiàn)非常出色,處理數(shù)以千計(jì)的并發(fā)請(qǐng)求非常輕松

nodejs寫服務(wù)端怎么樣

1. 使用nodejs做底層,javascript編寫邏輯代碼能很大程度上提高開發(fā)效率。

2. 無需編譯,修改完直接啟動(dòng)運(yùn)行,非常迅速

3. nodejs大而全的底層庫,以及海量的優(yōu)秀插件能大大簡化開發(fā)流程。

4. 與nosql數(shù)據(jù)庫完美結(jié)合。

5. 可包攬服務(wù)器架構(gòu)中的方方面面。

6. javascript熱更新非常方便。

缺點(diǎn):

1. 有句話是這么說的:“動(dòng)態(tài)類型一時(shí)爽,代碼重構(gòu)火葬場(chǎng)。”

2. 好用的IDE比較缺乏。

3. 無法直接進(jìn)行多線程編程。

個(gè)人認(rèn)為強(qiáng)類型語言更適合做游戲服務(wù)器開發(fā)。

網(wǎng)頁名稱:關(guān)于nosqlnodejs的信息
網(wǎng)站URL:http://muchs.cn/article26/phigcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站建設(shè)、商城網(wǎng)站面包屑導(dǎo)航

廣告

聲明:本網(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)

搜索引擎優(yōu)化