рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╛рдпрд░рдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдо рдмрдирд╛рдо рд╕рд┐рдВрдХ

рдЫрд╡рд┐

рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдХрдИ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП:



рдлрд┐рд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб ...


рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ:
рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо
select * from rdb$relations 

JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдЖрдХрд╛рд░ рдореЗрдВ рд▓рдЧрднрдЧ 19 kb рдХрд╛ рдЙрддреНрддрд░ рд╣реЛрдЧрд╛ред

рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░, рдЕрдкрд╛рдЪреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╛рдПрдВрдЧреЗред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ:
  ab -n 10000 -c 5 http: // localhost: 1337 / 


рдореИрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рди рдбрд╛рд▓реЗрдВред рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (RPS) рд╕рдВрд╕рд╛рдзрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАред

рддреЛ, рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдПрдХреНрд╕реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рднреА рдХреЙрд▓ рд╕рдордХрд╛рд▓рд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ:

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); var rs = con.querySync('select * from rdb$relations'); var rows = rs.fetchSync("all",true); con.disconnect(); res.write('['); rows.forEach(function(r){ res.write(JSON.stringify(r)+','); }); res.end(']'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 52.47 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдХрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реЗрд░рд┐рдПрдВрдЯ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
рдлрд╛рдпрд░рдмрд░реНрдб рдПрдХреНрд╕реЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЙрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var con = fb.createConnection(); con.connect(cfg.db, cfg.user, cfg.password, cfg.role,function(){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ con.disconnect(); res.end(']'); }); }); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 129.26 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдиреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛
129 рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 52 рдЕрдиреБрд░реЛрдзред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкреВрд░реЗ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХреА рд╕рдорд╛рди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдлрд╝реНрд▓рд╛рдИ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪреБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЕрднреА рднреА рдЙрдк-рд░реВрдкреА рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдЪрд░рдо рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП:

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); if(!con.inTransaction) con.startTransactionSync(); var rs = con.querySync('select * from rdb$relations'); var rows = rs.fetchSync("all",true); res.write('['); rows.forEach(function(r){ res.write(JSON.stringify(r)+','); }); res.end(']'); con.commitSync(); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 159.55 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкрд┐рдЫрд▓реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рддрдХрдиреАрдХ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдореЗрдВ рд▓реЗрдиреЗ рд▓рд╛рдпрдХ рд╣реИред

рдЕрдм рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ - рдПрдХрд▓ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП ...

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var http = require('http'); var con = fb.createConnection(); con.connectSync(cfg.db, cfg.user, cfg.password, cfg.role), busy = false, next = []; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); function doReq(){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ res.end(']'); con.commit(function(){ busy = false; var n = next.pop(); if(n) n(); }); }); }); } function process(){ busy = true; if(!con.inTransaction) con.startTransaction(doReq); else doReq(); } if(busy) next.push(function(){ process(); }); else process(); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 129.85 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдХрд▓реНрдк рдмрд▓реНрдХрд┐ рднрд╛рд░реА рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреБрд▓ 129 рдкреНрд░рд╢реНрди рджреЗрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрд▓ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд▓рд╛рдиреЗ рд╕реЗ рд▓рд╛рдн рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╛рдпрд░рдмрд░реНрдб рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдирдУрдбреАрдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмрд░реНрдб рдореЙрдбреНрдпреВрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдб рдореЗрдВ рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд▓рд┐рдмрд╡ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдорд╡рд░реНрддреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХрд▓ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдореЗрдВ рд╡реНрдпрд╕реНрдд рдХрдиреЗрдХреНрд╢рди рдФрд░ рдХрддрд╛рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрддрд╛рд░ рдХрд╛ рд╕рдВрдЧрдарди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдзреАрдорд╛ рдХрд╛рд░рдХ рдмрди рдЧрдпрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рддреЗрдЬ рдерд╛ред рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╣рдореЗрд╢рд╛ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдорд╛рдзрд╛рди рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var events = require('events'); var http = require('http'); function ConnectionPool() { events.EventEmitter.call(this); this.conns = []; this.busy = []; this.MaxConns = 5; this.newConn = function(){ var c = fb.createConnection(); c.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); this.conns.push(c); }; this.get = function(cb) { var self = this; var c = this.conns.pop(); if(c) { this.busy.push(c); cb(c); } else if((this.busy.length) >= this.MaxConns){ this.once('release',function(){ self.get(cb); }); } else { this.newConn(); this.get(cb); } }; this.release = function(con){ for(var i=0;i<this.busy.length;i++) { if(this.busy[i] == con){ this.conns.push(this.busy[i]); this.busy.splice(i,1); var self = this; process.nextTick(function(){ self.emit('release'); }); return; } } }; } util.inherits(ConnectionPool, events.EventEmitter); var pool = new ConnectionPool(); pool.setMaxListeners(2000); function exec(con,res){ con.query('select * from rdb$relations',function(err,rs){ res.write('['); rs.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); },function(err){ res.end(']'); con.commit(function(){ pool.release(con); }); }); }); }; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); pool.get(function(con){ if(!con.inTransaction) con.startTransaction(function(err){ if(!err) exec(con,res); }); else exec(con,res); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 187.82 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдмрд╣реБрдд рдХреЛрдб рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛрдб рд╕рд░рд▓ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд░рд╣реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЖрдк рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╛рдпрд░рдмрд░реНрдб рдЖрдкрдХреЛ рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд┐рдирд╛, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдХрдИ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд▓рдЧрддрд╛ рд╣реИ:

 var cfg = require("../config").cfg; var fb = require('../../firebird'); var util = require('util'); var events = require('events'); var http = require('http'); function StatementPool() { events.EventEmitter.call(this); this.conns = []; this.busy = []; this.MaxConns = 5; this.newConn = function(){ var c ={ conn: fb.createConnection() }; c.conn.connectSync(cfg.db, cfg.user, cfg.password, cfg.role); c.stmt = c.conn.prepareSync('select * from rdb$relations'); this.conns.push(c); }; this.get = function(cb) { var self = this; var c = this.conns.pop(); if(c) { this.busy.push(c); cb(c); } else if((this.busy.length) >=this.MaxConns){ this.once('release',function(){ self.get(cb); }); } else { this.newConn(); this.get(cb); } }; this.release = function(con){ for(var i=0;i<this.busy.length;i++) { if(this.busy[i] == con){ this.conns.push(this.busy[i]); this.busy.splice(i,1); var self = this; process.nextTick(function(){ self.emit('release'); }); return; } } }; } util.inherits(StatementPool, events.EventEmitter); var pool = new StatementPool(); pool.setMaxListeners(2000); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); pool.get(function(con){ var exec = function(){ con.stmt.exec(); con.stmt.once('result',function(err){ res.write('['); con.stmt.fetch("all",true,function(r){ res.write(JSON.stringify(r)+','); }, function(err){ res.end(']'); con.conn.commit(function(){ pool.release(con); }); }); }); }; if(!con.conn.inTransaction) con.conn.startTransaction(function(err){ if(!err) exec(); }); else exec(); }); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 


рдХреБрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд: 199310000 рдмрд╛рдЗрдЯреНрд╕
HTML рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд: 198670000 рдмрд╛рдЗрдЯреНрд╕
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз: 214.37 [# / рд╕реЗрдХрдВрдб] (рдорддрд▓рдм)

рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 210 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рджреЗрддрд╛ рд╣реИред

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 4 рдЧреБрдирд╛ рд▓рд╛рдн рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рднреА рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдХреЗрд▓реЗ NodeJS рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 256 рдПрдордмреА рдореЗрдореЛрд░реА рдФрд░ 1 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдпрд╣ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рдЖрд░рдкреАрдПрд╕ рдореЗрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрдореЛрд░реА рд▓реЛрдб 3% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдРрд╕реЗ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдереЗред RPS рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдХрд╛рд░рдХ рдХреНрд╡реЗрд░реА рдирдореВрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдирдореВрдирд╛ рдХреЛ 10 рд░рд┐рдХреЙрд░реНрдб (рдкрд░рд┐рдгрд╛рдореА JSON рдореЗрдВ рд▓рдЧрднрдЧ 1kb) рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ 4 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рд▓рдЧрднрдЧ 1000 рдЖрд░рдкреАрдПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╕реНрдХрд░рдг рд▓рдЧрднрдЧ 200 рдЖрд░рдкреАрдПрд╕ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдХрд▓реНрдк, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛, рдПрдХ рд╕рд╛рде HTML рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬрдмрдХрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ NodeJS рдХреЗ рд▓рд┐рдП рдлрд╛рдпрд░рдмрд░реНрдб рдПрдХреНрд╕реЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ
рдФрд░ рдЧреАрдереВрдм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

Source: https://habr.com/ru/post/In139708/


All Articles