ݺߣ

ݺߣShare 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

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

  • 1. Серверный JavaScript NodeJS • CouchDB
  • 2. Привет, мир! Степан Столяров http://bit.ly/stevebest stepan.stolyarov@gmail.com Вопросы: 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" : "stepan.stolyarov@gmail.com", "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