Серверный 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: рецепты


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

CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB

839

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
839
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CodeFest 2010. Столяров С. — Серверный 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
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×