CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 1,052 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,052
On Slideshare
705
From Embeds
347
Number of Embeds
5

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 347

http://codefest.ru 322
http://2010.codefest.ru 20
http://backend.codefest.ru 3
http://hghltd.yandex.net 1
http://backend.2gis.ru 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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