1 / 38

mongodb

NoSQL база данных. mongodb.org. Олег Качан Независимый разработчик twitter.com/ maximalno. NoSQL = Not only SQL. NoSQL базы данных. Key-value (Redis, Dynamo, MemcacheDB, Voldemort) Document (MongoDB, CouchDB, Riak) Wide Column (BigTable, Cassandra, HBase) Graph (Neo4j, InfiniteGraph).

avalon
Download Presentation

mongodb

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. NoSQL база данных mongodb.org

  2. Олег Качан Независимый разработчик twitter.com/maximalno

  3. NoSQL = Not only SQL

  4. NoSQL базы данных • Key-value (Redis, Dynamo, MemcacheDB, Voldemort) • Document (MongoDB, CouchDB, Riak) • Wide Column (BigTable, Cassandra, HBase) • Graph (Neo4j, InfiniteGraph)

  5. MongoDB • Быстрая база данных (C++) • Устоявшийся проект, выпущена версия 2.0 • Open-source, но разрабатывается и поддерживается компанией 10gen • Одно из наиболее универсальных решений

  6. Поддержка MongoDB языками Официальные драйверы • C/C++ • Java • .NET • Javascript • Perl • PHP • Python • Ruby • Erlang • Scala • Haskell Драйверы open-source ActionScript, Clojure, Delphi, Node.js, F#, Go, Groovy, Lua, Objective C, Smalltalk и т.д.

  7. Кто использует MongoDB? Craigslist

  8. Кто использует MongoDB?

  9. @hipsterhacker If it's not MongoDB, it's the WrongoDB Retweeted by @bowermanandrew and 100+ others

  10. MongoDB Документная база данных

  11. Каждому ключу соответствует документ { first_name: “Oleg”, last_name: “Kachan”, contacts: { twitter: “maximalno”, email: “683009@gmail.com” },skills: [“php”, “node.js”, “mongodb”] } _id: ObjectId(“4daf…”) =>

  12. Организация данных

  13. Измение мышление Навыки работы с SQL базами не подходят для NoSQL • Нет JOIN • Избыточность данных вместо нормализации • Контроль данных из приложения, а не из базы

  14. MongoDB Чем лучше?

  15. Сравнение с другими решениями • Memcached Производительность • Key/value • MongoDB • RDBMS Функциональность

  16. Преимущества • Документно-ориентированная база данных • Быстрое чтение и особенно запись • Широкая по сравнению с другими NoSQL функциональсть • Масштабирование из коробки • По чтению (Master/slave, Replica sets) • По записи (Sharding)

  17. Но зачем? Области применения

  18. MongoDB Не подходит: • если вы используете JOIN’ы • если вам необходимы транзакции Подходит: • хранение разнородных данных • хранение геоданных • хранение логов и статистики

  19. Пример Система управления контентом • HTML-страница • Новость • Карточка товара

  20. Пример Система управления контентом SQL 3 таблицы: pages, news, goods MongoDB 1 коллекция: documents

  21. Пример Система управления контентом Страница { type: “page”, content: “Текст на странице” }

  22. Пример Система управления контентом Новость { type: “news”, date: new Date(), header: “Заголовок”, teaser: “Краткий текст”, content: “Полное содержание” }

  23. Пример Система управления контентом Карточка товара { type: “good”, name: “Телевизор” price: 30000, features: { lcd: 1, led: 0 }, categories: [ “home”, “tv” ] }

  24. MongoDB Подробнее

  25. Организация данных

  26. Типы данных BSON • String • Integer • Double • Date • Byte array (бинарные данные) • Boolean • Null • BSON Object

  27. Ключ Каждому добавленному документу автоматически предоставляется уникальный ключ _id: ObjectId(“47cc67093475061e3d95369d”)

  28. CRUD

  29. Create SQL 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”; MongoDB use vldcdb.users.insert({ first_name: “Oleg” })

  30. Read SQL SELECT * FROM usersSELECT first_name FROM users MongoDB db.users.find()db.users.find({}, { first_name: 1 })

  31. Read SQL SELECT * FROM usersWHERE first_name = “Oleg” ORDER BY id DESC LIMIT 1,10 MongoDB db.users.find({first_name: “Oleg” }).sort({ _id: -1 }).skip(1).limit(10)

  32. Операторы условий • $gt, $lt, $gte, $lte • $ne • $in, $nin • $mod • $all • $size • $exists • $type • $not • $where

  33. Update SQL UPDATE users SET last_name = “Kachan” WHERE first_name= “Oleg” MongoDB db.users.update({ first_name: “Oleg” }, { last_name: “Kachan”})db.users.update({ first_name: “Oleg” }, { $set: { last_name: “Kachan” } })

  34. Операторы модификации • $set • $unset • $inc • $push • $pushAll • $addToSet • $pop • $pull • $pullAll

  35. Delete SQL DELETE FROM users WHERE id = 1DELETE FROM users WHERE first_name = “Oleg” MongoDB db.users.remove({ _id: ObjectId(“4df8fb81ed4cadd6271c0000”) })db.users.remove({ first_name: “Oleg”})

  36. Создание индексов SQL ALTER TABLE `users` ADD INDEX (`first_name`) MongoDB db.users.ensureIndex({ first_name: 1 }) // по возрастаниюdb.users.ensureIndex({ first_name: -1 })// по убыванию

  37. Гео-индекс MongoDB db.places.ensureIndex({ location: “2d” } Поиск при помощи операторов • $near – поиск объектов с сортировкой, самые близкие - первые • $box– поиск объектов в заданном квадрате • $center– поиск объектов в заданном радиусе

  38. Спасибо! Ответы на вопросы

More Related