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

mongodb

  • Upload
    avalon

  • View
    65

  • Download
    0

Embed Size (px)

DESCRIPTION

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). - PowerPoint PPT Presentation

Citation preview

Page 1: mongodb

mongodb.org

NoSQL база данных

Page 2: mongodb

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

twitter.com/maximalno

Page 3: mongodb

NoSQL = Not only SQL

Page 4: mongodb

NoSQL базы данных

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

Document (MongoDB, CouchDB, Riak)

Wide Column (BigTable, Cassandra, HBase)

Graph (Neo4j, InfiniteGraph)

Page 5: mongodb

MongoDB

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

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

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

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

Page 6: mongodb

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

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

Craigslist

Page 8: mongodb

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

Page 9: mongodb

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

Retweeted by @bowermanandrew and 100+ others

Page 10: mongodb

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

Page 11: mongodb

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

{

first_name: “Oleg”,

last_name: “Kachan”,

contacts: {

twitter: “maximalno”,

email: “[email protected]

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

}

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

Page 12: mongodb

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

SQL MongoDB

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

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

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

Page 13: mongodb

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

JOINНет

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

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

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

Page 14: mongodb

MongoDB ?Чем лучше

Page 15: mongodb

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

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

• Memcached

• Key/value• MongoDB

• RDBMS

Page 16: mongodb

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

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

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

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

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

Page 17: mongodb

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

Page 18: mongodb

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

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

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

Подходит:

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

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

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

Page 19: mongodb

Пример

HTML-страница

Новость

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

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

Page 20: mongodb

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

SQL

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

MongoDB

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

Page 21: mongodb

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

Страница

{type: “page”,

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

}

Page 22: mongodb

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

Новость

{type: “news”,

date: new Date(),

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

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

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

}

Page 23: mongodb

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

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

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

lcd: 1,led: 0

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

}

Page 24: mongodb

MongoDBПодробнее

Page 25: mongodb

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

Page 26: mongodb

Типы данных BSONString

Integer

Double

Date

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

Boolean

Null

BSON Object

Page 27: mongodb

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

ключ

_id: ObjectId(“47cc67093475061e3d95369d”)

Page 28: mongodb

CRUD

Page 29: mongodb

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

ReadSQL

SELECT * FROM usersSELECT first_name FROM users

MongoDB

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

Page 31: mongodb

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

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

$ne

$in, $nin

$mod

$all

$size

$exists

$type

$not

$where

Page 33: mongodb

UpdateSQLUPDATE users SET last_name = “Kachan” WHERE first_name= “Oleg”

MongoDBdb.users.update({ first_name: “Oleg” }, { last_name: “Kachan” })db.users.update({ first_name: “Oleg” }, { $set: { last_name: “Kachan” } })

Page 34: mongodb

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

$unset

$inc

$push

$pushAll

$addToSet

$pop

$pull

$pullAll

Page 35: mongodb

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

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

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

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

Page 37: mongodb

Гео-индексMongoDB

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

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

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

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

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

Page 38: mongodb

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