SlideShare a Scribd company logo
Node.js + MongoDB
シングルページ Webアプリケーション(SPA)
Aug 2015, Naoki Sasaki
Webの歴史
• 静的HTMLドキュメントの表示とハイパーリンクによるHTMLドキュメン
ト間のリンク
• HTMLドキュメント内の一部を動的に置き換える(サーバサイド・インク
ルードなど)
• JSP/ASP/PHPなど、HTMLドキュメント内にスクリプトを埋め込み、サー
バサイドで実行した結果の HTMLドキュメントをクライアントへ返す
• クライアントから Ajaxにより Servlet/EJBなどへリクエストを発行し動的
にクライアント上の HTML DOMを書き換える(レスポンシブル Webアプ
リケーション)
これまでのWeb
• クライアントからの要求に従って HTMLドキュメント
をなるべく高速に返すという設計で成り立っている
• そのため、Apacheなどの Webサーバはクライアント
リクエストを待ち構えるスレッドを数十∼数百個事前
に作成(スレッド・プール)し、そのスレッドがリク
エストされた HTMLドキュメントを生成しクライアン
トへ返し、接続を切った後にスレッドプールへ返す方
法を取っている
これからのWeb
• クライアントがサーバへHTMLドキュメントを要求するの
は最初のごく小さなHTMLドキュメントで、以降サーバへ
HTMLドキュメントの再読込は一切行わない
• クライアントとサーバ間では WebSocketによりリクエス
ト/レスポンスを行い HTML DOM構造を動的に変更し続け
る(シングルページWebアプリケーション)
• そのため、クライアント/サーバ間は WebSocket通信の
ために常時接続が保たれる
従来のWebサーバの問題
• スレッド・プーリング方式の Webサーバでは一
度に数百のリクエストを高速に応えることはで
きるが、WebSocketを使用し、常時接続状態が
要求されるシングルページWebアプリケーショ
ンの場合には数百のプーリングされた待ち受け
スレッドをすぐに使い果たしてしまう
Node.jsの登場
• Node.jsはクライアントリクエストをイベント・ドリブンで処理する(ス
レッド・プールという概念はない)
• クライアントから要求があるとイベント・ハンドラへ要求を渡し、待ち受け
ハンドラは次のクライアント・リクエストを待つ
• イベント・ハンドラはクライアントとの接続が切れるまで存在する
• そのため、WebSocketによってクライアント/サーバ間で常時接続状態に
なっている場合でもスレッド・プーリング方式のように数百コネクション、
またはそれ以上となっても問題が発生しない
• 一般的なエントリレベルサーバ(Xeon 3GHz 4-Core、16GB)で同時数十万
接続が可能とされている
Node.jsのパフォーマンス
Node.jsのスケーラビリティ
• 1 Node.jsサーバでパフォーマンスが低下するほ
どの同時接続数が見込める場合には、Node.jsを
クラスタリングすることができる
• 一般的なロード・バランサやリバース・プロキ
シ(NGInxなど)
• Cluster.jsなどの実装
Databaseのおさらい
• データベースの種類
• ISAM DB
• テーブルへキーおよびデータ情報を持ち、キーによるデータベースアクセスを行う
• データベースを構造的に表現するのはプログラムロジックによって行われる
• RDBMS(SQL)
• テーブル・スペース内のテーブルへ行・列でデータがストアされる
• データベースを構造的に表現するためにはSQL(SELECT)文によるクエリが必要
• XML(オブジェクト) DB
• テーブル・スペース、テーブル、行、列という概念はなく、XML形式のオブジェクトを格納するオブジェク
ト指向データベース
• データベース内のオブジェクトがデータの構造そのものを表している
• 特定のデータへは XPath記法によるクエリーが可能
MongoDB
• MongoDBとは XML Databaseの入出力を JSON形式に置き
換えたものである
• XML DB同様に JSON形式で表現されたオブジェクト・
データをデータベースへ格納する
• オブジェクト・データのクエリには XPath同様の機能を備
えたjQuery様の“$(#foo)”といった記法で記述する
• RDBMSで言うストアド・プロシージャとして JavaScript
が使用可能
MongoDB
• データベース内にはどのような構造のオブジェク
トであっても格納できるが、これは諸刃の剣で
あるため、XMLでの DTD(Data Definition
Descriptor)と同様にオブジェクト構造を厳格に
定義するための機能として JSV(JSON
Validation)がある。これによって一貫したオブ
ジェクトのみデータベースへストアできる
MongoDBのスケーラビリティ
• MongoDBの組み込み機能により、複数マシン間
のレプリケーションが可能
• サーバをダウンさせることなくレプリケーショ
ンサーバを作成し、負荷分散を行わせることが
可能
まとめ
• Node.js+MongoDBを組み合わせることにより、フロントエンドの Webク
ライアント、アプリケーション・サーバ、データベースまで同一言語
(JavaScript)で記述できる
• そのためビジネス・ロジックの見直しが必要になった場合など、クライ
アントで行っていた処理をAPサーバ(Node.js)へ移行する、MongoDB
のストアド・プロシージャへ移行するなどと言ったことが簡単に行える
• ユーザの状態を永続化する場合などには単に JavaScriptオブジェクトを
シリアライズし MongoDBへストアするのみでOK
• (これは JavaScriptが Classベースのオブジェクト指向言語ではな
く、Prototypeベースのオブジェクト指向言語であるため)

More Related Content

PDF
Lt7 SPA
PDF
Nginx
PDF
tansuの紹介
PDF
React entry
PDF
テンプレートエンジンの話 #jjug
PDF
モダンすぎる静的サイトの作り方
PPTX
Html5biz on May 10th, 2013
PDF
WordPress Cloud Design Pattern
Lt7 SPA
Nginx
tansuの紹介
React entry
テンプレートエンジンの話 #jjug
モダンすぎる静的サイトの作り方
Html5biz on May 10th, 2013
WordPress Cloud Design Pattern

Similar to Node.js+MongoDB in SPA (20)

PPT
第1回鹿児島node.jsの会資料_内村
PDF
Nodeにしましょう
PDF
第1回鹿児島node.jsの会資料_内村
ODP
HTML5 アプリ開発
PPTX
HTML5最新動向
PDF
Spring Boot × Vue.jsでSPAを作る
PPTX
HTML5&API総まくり
PDF
ES6時代におけるWeb開発者とセキュリティ業界の乖離
PDF
SocketStream入門
PDF
densan2014-late01
PDF
ASP.NET シングル ページ アプリケーション (SPA) 詳説
PDF
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
PDF
MEANスタック提案プレゼンテーション
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PDF
Java scriptの進化
PDF
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
PPTX
Speed Up Web 2012
PDF
Node.jsでブラウザメッセンジャー
PDF
GraphQL入門 (AWS AppSync)
PDF
node-handlersocket
第1回鹿児島node.jsの会資料_内村
Nodeにしましょう
第1回鹿児島node.jsの会資料_内村
HTML5 アプリ開発
HTML5最新動向
Spring Boot × Vue.jsでSPAを作る
HTML5&API総まくり
ES6時代におけるWeb開発者とセキュリティ業界の乖離
SocketStream入門
densan2014-late01
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
MEANスタック提案プレゼンテーション
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Java scriptの進化
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
Speed Up Web 2012
Node.jsでブラウザメッセンジャー
GraphQL入門 (AWS AppSync)
node-handlersocket
Ad

Node.js+MongoDB in SPA