Your SlideShare is downloading. ×
0
mongodb.org NoSQL  база данных
Олег Качан Независимый разработчик twitter.com/ maximalno
NoSQL = Not only SQL
NoSQL  базы данных <ul><li>Key-value (Redis, Dynamo, MemcacheDB, Voldemort) </li></ul><ul><li>Document (MongoDB, CouchDB, ...
MongoDB <ul><li>Быстрая база данных ( C++ ) </li></ul><ul><li>Устоявшийся проект, выпущена версия 2 .0 </li></ul><ul><li>O...
Поддержка  MongoDB  языками <ul><li>C/C++ </li></ul><ul><li>Java </li></ul><ul><li>.NET </li></ul><ul><li>Javascript </li>...
Кто использует  MongoDB? Craigslist
Кто использует  MongoDB?
@hipsterhacker If it's not MongoDB, it's the WrongoDB Retweeted by  @bowermanandrew  and 100+ others
MongoDB Документная база данных
Каждому ключу соответствует документ <ul><li>{ </li></ul><ul><ul><li>first_name: “Oleg”, </li></ul></ul><ul><ul><li>last_n...
Организация данных SQL MongoDB База данных База данных Таблица Коллекция Строка/запись Документ
Измение мышление <ul><li>Нет JOIN </li></ul><ul><li>Избыточность данных вместо нормализации </li></ul><ul><li>Контроль дан...
MongoDB Чем лучше?
Сравнение с другими решениями Функциональность <ul><li>Memcached </li></ul><ul><li>Key/value </li></ul><ul><li>MongoDB </l...
Преимущества <ul><li>Документно-ориентированная база данных </li></ul><ul><li>Быстрое чтение и особенно запись </li></ul><...
Но зачем? О бласти применения
MongoDB <ul><li>Не подходит : </li></ul><ul><li>если вы используете  JOIN’ ы </li></ul><ul><li>если вам необходимы транзак...
Пример <ul><li>HTML- страница </li></ul><ul><li>Н овость </li></ul><ul><li>К арточка товара </li></ul>Система управления к...
Пример <ul><li>SQL </li></ul><ul><li>3  таблицы : pages, news, goods </li></ul><ul><li>MongoDB </li></ul><ul><li>1  коллек...
Пример <ul><li>Страница </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “page”, </li></ul></ul><ul><ul><li>content: “ Текс...
Пример <ul><li>Новость </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “news”, </li></ul></ul><ul><ul><li>date: new Date()...
Пример <ul><li>Карточка товара </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “good”, </li></ul></ul><ul><ul><li>name: “ ...
MongoDB Подробнее
Организация данных
Типы данных  BSON <ul><li>String </li></ul><ul><li>Integer </li></ul><ul><li>Double </li></ul><ul><li>Date </li></ul><ul><...
Ключ <ul><li>Каждому добавленному документу автоматически предоставляется уникальный ключ </li></ul><ul><li>_ id: ObjectId...
CRUD
Create <ul><li>SQL </li></ul><ul><li>CREATE DATABASE vldc; CREATE TABLE vldc.users (`id` INT AUTO_INCREMENT PRIMARY KEY, `...
Read <ul><li>SQL </li></ul><ul><li>SELECT * FROM users SELECT first_name FROM users </li></ul><ul><li>MongoDB </li></ul><u...
Read <ul><li>SQL </li></ul><ul><li>SELECT * FROM users WHERE first_name = “Oleg” ORDER BY id DESC LIMIT 1,10 </li></ul><ul...
Операторы условий <ul><li>$gt, $lt, $gte, $lte </li></ul><ul><li>$ne </li></ul><ul><li>$in, $nin </li></ul><ul><li>$mod </...
Update
Операторы модификации <ul><li>$set </li></ul><ul><li>$unset </li></ul><ul><li>$inc </li></ul><ul><li>$push </li></ul><ul><...
Delete <ul><li>SQL </li></ul><ul><li>DELETE FROM users WHERE id = 1 DELETE FROM users WHERE first_name = “Oleg” </li></ul>...
Создание индексов <ul><li>SQL </li></ul><ul><li>ALTER TABLE `users` ADD INDEX (`first_name`)  </li></ul><ul><li>MongoDB </...
Гео-индекс <ul><li>MongoDB </li></ul><ul><li>db.places.ensureIndex({ location: “2d” } </li></ul><ul><li>Поиск при помощи о...
Спасибо! Ответы на вопросы
Upcoming SlideShare
Loading in...5
×

MongoDB basics in Russian

6,247

Published on

MongoDB basics in Russian / Основы MongoDB по-русски /
http://twitter.com/maximalno

Published in: Technology

Transcript of "MongoDB basics in Russian"

  1. 1. mongodb.org NoSQL база данных
  2. 2. Олег Качан Независимый разработчик twitter.com/ maximalno
  3. 3. NoSQL = Not only SQL
  4. 4. NoSQL базы данных <ul><li>Key-value (Redis, Dynamo, MemcacheDB, Voldemort) </li></ul><ul><li>Document (MongoDB, CouchDB, Riak) </li></ul><ul><li>Wide Column (BigTable, Cassandra, HBase) </li></ul><ul><li>Graph (Neo4j, InfiniteGraph) </li></ul>
  5. 5. MongoDB <ul><li>Быстрая база данных ( C++ ) </li></ul><ul><li>Устоявшийся проект, выпущена версия 2 .0 </li></ul><ul><li>Open-source , но разрабатывается и поддерживается компанией 10gen </li></ul><ul><li>Одно из наиболее универсальных решений </li></ul>
  6. 6. Поддержка MongoDB языками <ul><li>C/C++ </li></ul><ul><li>Java </li></ul><ul><li>.NET </li></ul><ul><li>Javascript </li></ul><ul><li>Perl </li></ul><ul><li>PHP </li></ul><ul><li>Python </li></ul><ul><li>Ruby </li></ul>Официальные драйверы <ul><li>Erlang </li></ul><ul><li>Scala </li></ul><ul><li>Haskell </li></ul>Драйверы open-source ActionScript, Clojure, Delphi, Node.js, F#, Go, Groovy, Lua, Objective C, Smalltalk и т.д.
  7. 7. Кто использует MongoDB? Craigslist
  8. 8. Кто использует MongoDB?
  9. 9. @hipsterhacker If it's not MongoDB, it's the WrongoDB Retweeted by @bowermanandrew and 100+ others
  10. 10. MongoDB Документная база данных
  11. 11. Каждому ключу соответствует документ <ul><li>{ </li></ul><ul><ul><li>first_name: “Oleg”, </li></ul></ul><ul><ul><li>last_name: “Kachan”, </li></ul></ul><ul><ul><li>contacts: { </li></ul></ul><ul><ul><ul><li>twitter: “maximalno”, </li></ul></ul></ul><ul><ul><ul><li>email: “683009@gmail.com” </li></ul></ul></ul><ul><ul><li>}, skills: [“php”, “node.js”, “mongodb”] </li></ul></ul><ul><li>} </li></ul>_id: ObjectId(“ 4daf… ” ) =>
  12. 12. Организация данных SQL MongoDB База данных База данных Таблица Коллекция Строка/запись Документ
  13. 13. Измение мышление <ul><li>Нет JOIN </li></ul><ul><li>Избыточность данных вместо нормализации </li></ul><ul><li>Контроль данных из приложения, а не из базы </li></ul>Навыки работы с SQL базами не подходят для NoSQL
  14. 14. MongoDB Чем лучше?
  15. 15. Сравнение с другими решениями Функциональность <ul><li>Memcached </li></ul><ul><li>Key/value </li></ul><ul><li>MongoDB </li></ul><ul><li>RDBMS </li></ul>
  16. 16. Преимущества <ul><li>Документно-ориентированная база данных </li></ul><ul><li>Быстрое чтение и особенно запись </li></ul><ul><li>Широкая по сравнению с другими NoSQL функциональность </li></ul><ul><li>Масштабирование из коробки </li></ul><ul><ul><li>По чтению ( Master/slave, Replica sets ) </li></ul></ul><ul><ul><li>По записи ( Sharding ) </li></ul></ul>
  17. 17. Но зачем? О бласти применения
  18. 18. MongoDB <ul><li>Не подходит : </li></ul><ul><li>если вы используете JOIN’ ы </li></ul><ul><li>если вам необходимы транзакции </li></ul><ul><li>Подходит : </li></ul><ul><li>хранение разнородных данных </li></ul><ul><li>хранение геоданных </li></ul><ul><li>хранение логов и статистики </li></ul>
  19. 19. Пример <ul><li>HTML- страница </li></ul><ul><li>Н овость </li></ul><ul><li>К арточка товара </li></ul>Система управления контентом
  20. 20. Пример <ul><li>SQL </li></ul><ul><li>3 таблицы : pages, news, goods </li></ul><ul><li>MongoDB </li></ul><ul><li>1 коллекция : documents </li></ul>Система управления контентом
  21. 21. Пример <ul><li>Страница </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “page”, </li></ul></ul><ul><ul><li>content: “ Текст на странице ” </li></ul></ul><ul><li>} </li></ul>Система управления контентом
  22. 22. Пример <ul><li>Новость </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “news”, </li></ul></ul><ul><ul><li>date: new Date(), </li></ul></ul><ul><ul><li>header: “ Заголовок ” , </li></ul></ul><ul><ul><li>teaser: “ Краткий текст ” , </li></ul></ul><ul><ul><li>content: “ Полное содержание ” </li></ul></ul><ul><li>} </li></ul>Система управления контентом
  23. 23. Пример <ul><li>Карточка товара </li></ul><ul><li>{ </li></ul><ul><ul><li>type: “good”, </li></ul></ul><ul><ul><li>name: “ Телевизор ” </li></ul></ul><ul><ul><li>price: 30000 , </li></ul></ul><ul><ul><li>features: { </li></ul></ul><ul><ul><ul><li>lcd: 1, </li></ul></ul></ul><ul><ul><ul><li>led: 0 </li></ul></ul></ul><ul><ul><li>}, </li></ul></ul><ul><ul><li>categories: [ “home”, “tv” ] </li></ul></ul><ul><li>} </li></ul>Система управления контентом
  24. 24. MongoDB Подробнее
  25. 25. Организация данных
  26. 26. Типы данных BSON <ul><li>String </li></ul><ul><li>Integer </li></ul><ul><li>Double </li></ul><ul><li>Date </li></ul><ul><li>Byte array ( бинарные данные ) </li></ul><ul><li>Boolean </li></ul><ul><li>Null </li></ul><ul><li>BSON Object </li></ul>
  27. 27. Ключ <ul><li>Каждому добавленному документу автоматически предоставляется уникальный ключ </li></ul><ul><li>_ id: ObjectId(“47cc67093475061e3d95369d”) </li></ul>
  28. 28. CRUD
  29. 29. Create <ul><li>SQL </li></ul><ul><li>CREATE DATABASE vldc; CREATE TABLE vldc.users (`id` INT AUTO_INCREMENT PRIMARY KEY, `first_name` VARCHAR(50), `last_name` VARCHAR(50)); INSERT INTO vldc.users SET first_name = “Oleg”; </li></ul><ul><li>MongoDB </li></ul><ul><li>use vldc db.users.insert({ first_name: “Oleg” }) </li></ul>
  30. 30. Read <ul><li>SQL </li></ul><ul><li>SELECT * FROM users SELECT first_name FROM users </li></ul><ul><li>MongoDB </li></ul><ul><li>db.users.find() db.users.find({}, { first_name: 1 }) </li></ul>
  31. 31. Read <ul><li>SQL </li></ul><ul><li>SELECT * FROM users WHERE first_name = “Oleg” ORDER BY id DESC LIMIT 1,10 </li></ul><ul><li>MongoDB </li></ul><ul><li>db.users.find({first_name: “Oleg” }).sort({ _id: -1 }).skip(1).limit(10) </li></ul>
  32. 32. Операторы условий <ul><li>$gt, $lt, $gte, $lte </li></ul><ul><li>$ne </li></ul><ul><li>$in, $nin </li></ul><ul><li>$mod </li></ul><ul><li>$all </li></ul><ul><li>$size </li></ul><ul><li>$exists </li></ul><ul><li>$type </li></ul><ul><li>$not </li></ul><ul><li>$where </li></ul>
  33. 33. Update
  34. 34. Операторы модификации <ul><li>$set </li></ul><ul><li>$unset </li></ul><ul><li>$inc </li></ul><ul><li>$push </li></ul><ul><li>$pushAll </li></ul><ul><li>$addToSet </li></ul><ul><li>$pop </li></ul><ul><li>$pull </li></ul><ul><li>$pullAll </li></ul>
  35. 35. Delete <ul><li>SQL </li></ul><ul><li>DELETE FROM users WHERE id = 1 DELETE FROM users WHERE first_name = “Oleg” </li></ul><ul><li>MongoDB </li></ul><ul><li>db.users.remove({ _id: ObjectId(“4df8fb81ed4cadd6271c0000”) }) db.users.remove({ first_name: “Oleg”}) </li></ul>
  36. 36. Создание индексов <ul><li>SQL </li></ul><ul><li>ALTER TABLE `users` ADD INDEX (`first_name`) </li></ul><ul><li>MongoDB </li></ul><ul><li>db.users.ensureIndex({ first_name: 1 }) // по возрастанию db.users.ensureIndex({ first_name: -1 }) // по убыванию </li></ul>
  37. 37. Гео-индекс <ul><li>MongoDB </li></ul><ul><li>db.places.ensureIndex({ location: “2d” } </li></ul><ul><li>Поиск при помощи операторов </li></ul><ul><li>$near – поиск объектов с сортировкой, самые близкие - первые </li></ul><ul><li>$box – поиск объектов в заданном квадрате </li></ul><ul><li>$center – поиск объектов в заданном радиусе </li></ul>
  38. 38. Спасибо! Ответы на вопросы
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×