Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Серверный JavaScript
    NodeJS • CouchDB
Привет, мир!


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

Вопросы: http://goo.gl/mod...
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/
NodeJS


●
    Первая реализация серверного JavaScript,
    которой хочется пользоваться
●
    Событийный ввод/вывод для G...
Наивный ввод-вывод



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


print('Как вас зовут?');
input(function (name) {
  print('Привет, ' + name + '!');
});
// Мы мо...
NodeJS: зачем?
●
    Серверные приложения должны быть
    производительными
●   Один процессорный поток на соединение —
  ...
Событийный эхо-сервер
var net = require("net");
function handle(socket) {
 socket.on("data", function (data) {
   socket.w...
NodeJS: что внутри?
●   Двоичные буферы и потоки ввода-вывода
●   События и таймеры
●   Файловая система и процессы
●   Се...
CouchDB
●   Не просто NoSQL «DB»
●
    Документо-ориентированная БД
    ●   JSON, схемы данных нет
●
    RESTful HTTP API
...
Документы — это JSON

{
    "_id" : "stevebest",
    "_rev" : "1-c0d3...fe57",
    "type" : "vcard",
    "firstName" : "Ст...
Map/Reduce

function (doc) {
  if (doc.type == 'vcard') {
    emit(doc.lastName + ' ' + doc.firstName,
         doc.phone)...
Moar JavaScriptz!



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


●   CouchDB — это сервер БД, сервер
    приложений, и веб-сервер
●
    CouchApps — приложения для CouchDB
    ...
KTHXBYE!

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

●
    Масштабирование — это сложная штука
●
    Многопроцессорные системы: запустите
    больше п...
NodeJS: рецепты


●
    Многопользовательские приложения
    ●
        Онлайновые игры
●
    Низкоуровневая работа с запро...
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
Upcoming SlideShare
Loading in …5
×

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

2,744 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. Серверный JavaScript NodeJS • CouchDB
  2. 2. Привет, мир! Степан Столяров http://bit.ly/stevebest stepan.stolyarov@gmail.com Вопросы: http://goo.gl/mod/ABoC
  3. 3. JavaScriptz LOL! http://www.flickr.com/photos/wanderingnome/61806757/
  4. 4. Быстрый http://www.flickr.com/photos/eole/380316678/
  5. 5. Простой http://www.flickr.com/photos/ldrose/4609205635/
  6. 6. Богатый инструментарий http://www.flickr.com/photos/ontario_wanderer/3496185271/
  7. 7. One lang to rule them all http://www.flickr.com/photos/alessandrocarrozzo/442563751/
  8. 8. NodeJS ● Первая реализация серверного JavaScript, которой хочется пользоваться ● Событийный ввод/вывод для Google V8 http://nodejs.org/ http://github.com/ry/node
  9. 9. Наивный ввод-вывод 10 PRINT 'Как вас зовут?' 20 INPUT name 30 PRINT 'Привет, ', name, '!' 40 END
  10. 10. Неблокирующий ввод-вывод print('Как вас зовут?'); input(function (name) { print('Привет, ' + name + '!'); }); // Мы можем продолжать выполнение, // не дожидаясь ответа.
  11. 11. NodeJS: зачем? ● Серверные приложения должны быть производительными ● Один процессорный поток на соединение — это неоптимально ● Затраты на обработку и переключение потоков ● Смена контекстов дорога (стек выполнения, кеш процессора) ● Thread safety ● Решение — один поток с циклом событий
  12. 12. Событийный эхо-сервер 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");
  13. 13. NodeJS: что внутри? ● Двоичные буферы и потоки ввода-вывода ● События и таймеры ● Файловая система и процессы ● Сеть, сокеты, DNS, UDP, HTTP, query string ● Криптография ● Запуск скриптов в управляемой среде ● Assert, юнит-тестирование ● REPL
  14. 14. CouchDB ● Не просто NoSQL «DB» ● Документо-ориентированная БД ● JSON, схемы данных нет ● RESTful HTTP API ● Нет SQL, нет JOIN ● Реализация Map/Reduce на JavaScript ● Встроенная веб-консоль управления Futon http://couchdb.apache.org/
  15. 15. Документы — это JSON { "_id" : "stevebest", "_rev" : "1-c0d3...fe57", "type" : "vcard", "firstName" : "Степан", "lastName" : "Столяров", "email" : "stepan.stolyarov@gmail.com", "phone" : { "cell" : "+78005551234" } }
  16. 16. 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" } } ]}
  17. 17. Moar JavaScriptz! ● Валидация данных ● Генерация представления в различных форматах ● Получение и преобразование списков
  18. 18. CouchApps ● CouchDB — это сервер БД, сервер приложений, и веб-сервер ● CouchApps — приложения для CouchDB ● couchapp — инструмент разработки ● «Офлайновый режим» бесплатно ● P2P приложения
  19. 19. KTHXBYE! stepan.stolyarov@gmail.com
  20. 20. NodeJS: масштабирование ● Масштабирование — это сложная штука ● Многопроцессорные системы: запустите больше процессов ● Разделите сокет между процессами. Балансировщик — ядро ОС ● Используйте традиционные средства IPC ● WebWorkers ● Масштабирование вниз: Palm webOS
  21. 21. NodeJS: рецепты ● Многопользовательские приложения ● Онлайновые игры ● Низкоуровневая работа с запросами ● Обработка больших файлов ● Потоковая генерация и скачивание ● Создание mash-ups

×