MongoDB basics in Russian

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

description

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

Transcript of MongoDB basics in Russian

Page 1: MongoDB basics in Russian

mongodb.org

NoSQL база данных

Page 2: MongoDB basics in Russian

Олег Качан Независимый разработчик

twitter.com/maximalno

Page 3: MongoDB basics in Russian

NoSQL = Not only SQL

Page 4: MongoDB basics in Russian

NoSQL базы данных

Key-value (Redis, Dynamo, MemcacheDB, Voldemort)

Document (MongoDB, CouchDB, Riak)

Wide Column (BigTable, Cassandra, HBase)

Graph (Neo4j, InfiniteGraph)

Page 5: MongoDB basics in Russian

MongoDB

(Быстрая база данных C++)

, 2Устоявшийся проект выпущена версия .0

Open-source, но разрабатывается и поддерживается компанией 10gen

Одно из наиболее универсальных решений

Page 6: MongoDB basics in Russian

Поддержка 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 . .и т д

Page 7: MongoDB basics in Russian

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

Craigslist

Page 8: MongoDB basics in Russian

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

Page 9: MongoDB basics in Russian

@hipsterhackerIf it's not MongoDB, it's the WrongoDB

Retweeted by @bowermanandrew and 100+ others

Page 10: MongoDB basics in Russian

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

Page 11: MongoDB basics in Russian

Каждому ключу соответствует документ

{

first_name: “Oleg”,

last_name: “Kachan”,

contacts: {

twitter: “maximalno”,

email: “[email protected]

},skills: [“php”, “node.js”, “mongodb”]

}

_id: ObjectId(“4daf…”) =>

Page 12: MongoDB basics in Russian

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

SQL MongoDB

База данных База данных

Таблица Коллекция

/Строка запись Документ

Page 13: MongoDB basics in Russian

Измение мышление

JOINНет

Избыточность данных вместо нормализации

, Контроль данных из приложения а не из базы

SQL NoSQLНавыки работы с базами не подходят для

Page 14: MongoDB basics in Russian

MongoDB ?Чем лучше

Page 15: MongoDB basics in Russian

Сравнение с другими решениями

Функциональность

• Memcached

• Key/value• MongoDB

• RDBMS

Page 16: MongoDB basics in Russian

Преимущества - Документно ориентированная база данных

Быстрое чтение и особенно запись

Широкая по сравнению с другими NoSQL функциональность

Масштабирование из коробки

(По чтению Master/slave, Replica sets) (По записи Sharding)

Page 17: MongoDB basics in Russian

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

Page 18: MongoDB basics in Russian

MongoDB Не подходит:

если вы используете JOIN’ы

если вам необходимы транзакции

Подходит:

хранение разнородных данных

хранение геоданных

хранение логов и статистики

Page 19: MongoDB basics in Russian

Пример

HTML-страница

Новость

К арточкатовара

Система управления контентом

Page 20: MongoDB basics in Russian

Пример Система управления контентом

SQL

3 таблицы: pages, news, goods

MongoDB

1 коллекция: documents

Page 21: MongoDB basics in Russian

Пример Система управления контентом

Страница

{type: “page”,

content: “ Текст на странице”

}

Page 22: MongoDB basics in Russian

Пример Система управления контентом

Новость

{type: “news”,

date: new Date(),

header: “Заголовок”,

teaser: “ Краткий текст”,

content: “ Полное содержание”

}

Page 23: MongoDB basics in Russian

Пример Система управления контентом

Карточка товара{

type: “good”,name: “Телевизор”price: 30000,features: {

lcd: 1,led: 0

},categories: [ “home”, “tv” ]

}

Page 24: MongoDB basics in Russian

MongoDBПодробнее

Page 25: MongoDB basics in Russian

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

Page 26: MongoDB basics in Russian

Типы данных BSONString

Integer

Double

Date

Byte array ( бинарные данные)

Boolean

Null

BSON Object

Page 27: MongoDB basics in Russian

Ключ Каждому добавленному документу автоматически предоставляется уникальный

ключ

_id: ObjectId(“47cc67093475061e3d95369d”)

Page 28: MongoDB basics in Russian

CRUD

Page 29: MongoDB basics in Russian

CreateSQL

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” })

Page 30: MongoDB basics in Russian

ReadSQL

SELECT * FROM usersSELECT first_name FROM users

MongoDB

db.users.find()db.users.find({}, { first_name: 1 })

Page 31: MongoDB basics in Russian

ReadSQLSELECT * FROM usersWHERE first_name = “Oleg” ORDER BY id DESC LIMIT 1,10

MongoDBdb.users.find({first_name: “Oleg” }).sort({ _id: -1 }).skip(1).limit(10)

Page 32: MongoDB basics in Russian

Операторы условий$gt, $lt, $gte, $lte

$ne

$in, $nin

$mod

$all

$size

$exists

$type

$not

$where

Page 33: MongoDB basics in Russian

Update

Page 34: MongoDB basics in Russian

Операторы модификации$set

$unset

$inc

$push

$pushAll

$addToSet

$pop

$pull

$pullAll

Page 35: MongoDB basics in Russian

DeleteSQL

DELETE FROM users WHERE id = 1DELETE FROM users WHERE first_name = “Oleg”

MongoDBdb.users.remove({ _id: ObjectId(“4df8fb81ed4cadd6271c0000”) })db.users.remove({ first_name: “Oleg”})

Page 36: MongoDB basics in Russian

Создание индексовSQL

ALTER TABLE `users` ADD INDEX (`first_name`)

MongoDBdb.users.ensureIndex({ first_name: 1 }) // по возрастаниюdb.users.ensureIndex({ first_name: -1 }) // по убыванию

Page 37: MongoDB basics in Russian

Гео-индексMongoDB

db.places.ensureIndex({ location: “2d” }

Поиск при помощи операторов

$near – , - поиск объектов с сортировкой самые близкие первые

$box – поиск объектов в заданном квадрате

$center – поиск объектов в заданном радиусе

Page 38: MongoDB basics in Russian

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