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

1,013 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
1,013
On SlideShare
0
From Embeds
0
Number of Embeds
372
Actions
Shares
0
Downloads
7
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

×