SlideShare a Scribd company logo
Серверный JavaScript
    NodeJS • CouchDB
Привет, мир!


      Степан Столяров
     http://bit.ly/stevebest
  stepan.stolyarov@gmail.com

Вопросы: http://goo.gl/mod/ABoC
JavaScriptz LOL!




http://www.flickr.com/photos/wanderingnome/61806757/
Быстрый




http://www.flickr.com/photos/eole/380316678/
Простой




http://www.flickr.com/photos/ldrose/4609205635/
Богатый инструментарий




http://www.flickr.com/photos/ontario_wanderer/3496185271/
One lang to rule them all




http://www.flickr.com/photos/alessandrocarrozzo/442563751/
Серверный JavaScript: NodeJS и CouchDB
NodeJS


●
    Первая реализация серверного JavaScript,
    которой хочется пользоваться
●
    Событийный ввод/вывод для Google V8
    http://nodejs.org/
    http://github.com/ry/node
Наивный ввод-вывод



10   PRINT   'Как вас зовут?'
20   INPUT   name
30   PRINT   'Привет, ', name, '!'
40   END
Неблокирующий ввод-вывод


print('Как вас зовут?');
input(function (name) {
  print('Привет, ' + name + '!');
});
// Мы можем продолжать выполнение,
// не дожидаясь ответа.
NodeJS: зачем?
●
    Серверные приложения должны быть
    производительными
●   Один процессорный поток на соединение —
    это неоптимально
    ●   Затраты на обработку и переключение потоков
    ●
        Смена контекстов дорога (стек выполнения, кеш
        процессора)
    ●   Thread safety
●   Решение — один поток с циклом событий
Событийный эхо-сервер
var net = require("net");
function handle(socket) {
 socket.on("data", function (data) {
   socket.write(data);
 });
 socket.on("end", function () {
   socket.end();
 });
};
var server = net.createServer(handle);
server.listen(7777, "127.0.0.1");
NodeJS: что внутри?
●   Двоичные буферы и потоки ввода-вывода
●   События и таймеры
●   Файловая система и процессы
●   Сеть, сокеты, DNS, UDP, HTTP, query string
●   Криптография
●   Запуск скриптов в управляемой среде
●   Assert, юнит-тестирование
●   REPL
Серверный JavaScript: NodeJS и CouchDB
CouchDB
●   Не просто NoSQL «DB»
●
    Документо-ориентированная БД
    ●   JSON, схемы данных нет
●
    RESTful HTTP API
●
    Нет SQL, нет JOIN
    ●   Реализация Map/Reduce на JavaScript
●
    Встроенная веб-консоль управления Futon
    http://couchdb.apache.org/
Документы — это JSON

{
    "_id" : "stevebest",
    "_rev" : "1-c0d3...fe57",
    "type" : "vcard",
    "firstName" : "Степан",
    "lastName" : "Столяров",
    "email" : "stepan.stolyarov@gmail.com",
    "phone" : {
      "cell" : "+78005551234"
    }
}
Map/Reduce

function (doc) {
  if (doc.type == 'vcard') {
    emit(doc.lastName + ' ' + doc.firstName,
         doc.phone);
  }
}


{ "total_rows": 1, "offset": 0, "rows": [
 { "id": "stevebest",
   "key": "Столяров Степан",
   "value": { "cell" : "+78005551234" } }
]}
Moar JavaScriptz!



●
    Валидация данных
●
    Генерация представления в различных
    форматах
●
    Получение и преобразование списков
CouchApps


●   CouchDB — это сервер БД, сервер
    приложений, и веб-сервер
●
    CouchApps — приложения для CouchDB
    ●   couchapp — инструмент разработки
●
    «Офлайновый режим» бесплатно
●
    P2P приложения
KTHXBYE!

stepan.stolyarov@gmail.com
NodeJS: масштабирование

●
    Масштабирование — это сложная штука
●
    Многопроцессорные системы: запустите
    больше процессов
    ●
        Разделите сокет между процессами.
        Балансировщик — ядро ОС
    ●
        Используйте традиционные средства IPC
    ●
        WebWorkers
●   Масштабирование вниз: Palm webOS
NodeJS: рецепты


●
    Многопользовательские приложения
    ●
        Онлайновые игры
●
    Низкоуровневая работа с запросами
    ●
        Обработка больших файлов
    ●   Потоковая генерация и скачивание
●   Создание mash-ups
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB

More Related Content

What's hot (18)

Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
Maxim Dementyev
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
Services в drupal 8
Services в drupal 8
DrupalCamp Kyiv Рысь
 
Консольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
Alex Chistyakov
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Devconf15
Devconf15
Михаил Тюрин
 
Барнаул15
Барнаул15
Михаил Тюрин
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
Daniel Podolsky
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
Maxim Dementyev
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
Консольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
Alex Chistyakov
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
Daniel Podolsky
 
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Доклад Валерия Старынина на DevConf 2014. "StatsCollector, или "Мама! Он и ме...
Badoo Development
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
Pavel Dovbush
 

Similar to Серверный JavaScript: NodeJS и CouchDB (20)

What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
Windows Azure and node js
Windows Azure and node js
Alex Tumanoff
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
Serge Shirokov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJS
Yura Bogdanov
 
Node.js (RichClient)
Node.js (RichClient)
Serge Shirokov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 
Devcamp nodejs-2010
Devcamp nodejs-2010
Antono Vasiljev
 
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
Ontico
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Yandex
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
Dmytro Mindra
 
Server Side Javascript (ru)
Server Side Javascript (ru)
Bakyt Niyazov
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
Current State of Server Side JavaScript
Current State of Server Side JavaScript
Oleg Podsechin
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScript
Олег Шерыхалин
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
Vasiliy Teliatnikov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
Windows Azure and node js
Windows Azure and node js
Alex Tumanoff
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
Serge Shirokov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJS
Yura Bogdanov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)
Ontico
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021
Timur Shemsedinov
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Yandex
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
Dmytro Mindra
 
Server Side Javascript (ru)
Server Side Javascript (ru)
Bakyt Niyazov
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
Ontico
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
Current State of Server Side JavaScript
Current State of Server Side JavaScript
Oleg Podsechin
 
Ad

Серверный JavaScript: NodeJS и CouchDB

  • 1. Серверный JavaScript NodeJS • CouchDB
  • 2. Привет, мир! Степан Столяров http://bit.ly/stevebest [email protected] Вопросы: http://goo.gl/mod/ABoC
  • 7. One lang to rule them all http://www.flickr.com/photos/alessandrocarrozzo/442563751/
  • 9. NodeJS ● Первая реализация серверного JavaScript, которой хочется пользоваться ● Событийный ввод/вывод для Google V8 http://nodejs.org/ http://github.com/ry/node
  • 10. Наивный ввод-вывод 10 PRINT 'Как вас зовут?' 20 INPUT name 30 PRINT 'Привет, ', name, '!' 40 END
  • 11. Неблокирующий ввод-вывод print('Как вас зовут?'); input(function (name) { print('Привет, ' + name + '!'); }); // Мы можем продолжать выполнение, // не дожидаясь ответа.
  • 12. NodeJS: зачем? ● Серверные приложения должны быть производительными ● Один процессорный поток на соединение — это неоптимально ● Затраты на обработку и переключение потоков ● Смена контекстов дорога (стек выполнения, кеш процессора) ● Thread safety ● Решение — один поток с циклом событий
  • 13. Событийный эхо-сервер var net = require("net"); function handle(socket) { socket.on("data", function (data) { socket.write(data); }); socket.on("end", function () { socket.end(); }); }; var server = net.createServer(handle); server.listen(7777, "127.0.0.1");
  • 14. NodeJS: что внутри? ● Двоичные буферы и потоки ввода-вывода ● События и таймеры ● Файловая система и процессы ● Сеть, сокеты, DNS, UDP, HTTP, query string ● Криптография ● Запуск скриптов в управляемой среде ● Assert, юнит-тестирование ● REPL
  • 16. CouchDB ● Не просто NoSQL «DB» ● Документо-ориентированная БД ● JSON, схемы данных нет ● RESTful HTTP API ● Нет SQL, нет JOIN ● Реализация Map/Reduce на JavaScript ● Встроенная веб-консоль управления Futon http://couchdb.apache.org/
  • 17. Документы — это JSON { "_id" : "stevebest", "_rev" : "1-c0d3...fe57", "type" : "vcard", "firstName" : "Степан", "lastName" : "Столяров", "email" : "[email protected]", "phone" : { "cell" : "+78005551234" } }
  • 18. Map/Reduce function (doc) { if (doc.type == 'vcard') { emit(doc.lastName + ' ' + doc.firstName, doc.phone); } } { "total_rows": 1, "offset": 0, "rows": [ { "id": "stevebest", "key": "Столяров Степан", "value": { "cell" : "+78005551234" } } ]}
  • 19. Moar JavaScriptz! ● Валидация данных ● Генерация представления в различных форматах ● Получение и преобразование списков
  • 20. CouchApps ● CouchDB — это сервер БД, сервер приложений, и веб-сервер ● CouchApps — приложения для CouchDB ● couchapp — инструмент разработки ● «Офлайновый режим» бесплатно ● P2P приложения
  • 22. NodeJS: масштабирование ● Масштабирование — это сложная штука ● Многопроцессорные системы: запустите больше процессов ● Разделите сокет между процессами. Балансировщик — ядро ОС ● Используйте традиционные средства IPC ● WebWorkers ● Масштабирование вниз: Palm webOS
  • 23. NodeJS: рецепты ● Многопользовательские приложения ● Онлайновые игры ● Низкоуровневая работа с запросами ● Обработка больших файлов ● Потоковая генерация и скачивание ● Создание mash-ups