32
MongoDB Александр Чайка <[email protected]>, 06/2012 Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах. 1

MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

1

MongoDB

Александр Чайка <[email protected]>, 06/2012

Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах.

Page 2: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

2

Что такое NoSQL?

Основная цель подхода — расширить возможности базы данных там, где SQL недостаточно гибок…

Page 3: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

3

1. Нереляционная модель данных;

В основе идей NoSQL лежит следующее:

RDBMS NoSQL

Page 4: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

4

3. Хорошая горизонтальная масштабируемость “из коробки”;

2. Открытый исходный код;

MySQL Community4 nodes

MongoDB1’000 nodes

Page 5: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

5

Установка

Windows – качаем и ставим: > mongod --logpath /var/log --logappend --dbpath /var/data --install

Ubuntu/Linux – ставим в ручную:

https://github.com/mongodb/mongo.git

apt-get install mongodb

Page 6: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

6

Проблемы репозиториев

MongoDB database versions• Ubuntu 10.04 LTS (AWS default) - 1.2.2• Mongodb.org – 2.0.5

MongoDB PHP driver versions• PEAR channel – 1.2.1• GITHub official – 1.2.5

Page 7: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

7

Динамические базы и коллекции

1. Не надо знать, существует ли база;

2. Не надо знать структуру базы;

3. Не надо знать имя коллекции (таблицы);

4. У каждого документа (строки) может быть своя структура.

Page 8: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

8

Динамические базы и коллекции$mongo = new Mongo;$mongo->database->collection->insert(array(

“id” => 1,“name” => “user”,“pass” => “pass”

));$mongo->database->collection->insert(array(

“id” => 1,“action” => “control”,“desc” => “description”

));

Page 9: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

9

$mongo->database->collection->find(array(“id”:1));

array(“id” => 1,“name” => “user”,“pass” => “pass”

);array(

“id” => 1,“action” => “control”,“desc” => “description”

);

Динамические базы и коллекции

Page 10: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

10

JSON-style and JavaScript

• Для внутреннего хранения используется BSON – бинарное представление JSON.

• Весь синтаксис запросов построен на основе JSON-объектов: > use database

> db.collection .find({ id: {$ne: 1}}, { name: 1}) .sort({ ‘group.id’:-1, id:-1})

.limit(10);

Page 11: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

11

SQL to Mongo mapping chart

Page 12: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

12

MySQL Join vs. Embed document

Page 13: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

13

2 таблицы = одна коллекция

{ id : 1, username: user, password: somepass, group: { id : 1, name: administrator }}

TABLE USERid INT (10) AUTO_INCREMENTgroup_id INT (10) NOT NULLusername VARCHAR (255) NOT NULLpassword VARCHAR (32) NOT NULL

TABLE GROUPid INT (10) AUTO_INCREMENTname VARCHAR (255) NOT NULL

MySQL MongoDB

Page 14: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

14

Область применения

Page 15: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

15

Производительность и масштабиремость

Целостность данныхФункциональность

Memcached / Key-value

MySQL / RDBMS

MongoDB / NoSQL

Page 16: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

16

{ "id": "1234567893", "at": 2, "tmax": 120, "imp": [ { "id": "1", "video": { "mimes": [ "video/x-flv", "video/mp4"], "minduration": 5, "protocol": [ 1, 2, 3, 4], "w": 640, "h": 480, "maxextended": 30, "minbitrate": 300, "pos": 1, } } ], "site": { "id": "1345135123", "name": "Site ABCD", "domain": "siteabcd.com", "device": { "ip": "64.124.253.1", "ua": "Mozilla/5.0(MacOSX10.6)", "os": "OSX", "flashversion": "10.1", "js": 1 }, "user": { "uid": "456789876567897654678987656789", "buyeruid": "545678765467876567897654", } }}

Page 17: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

17

Multiple INSERT – возможно ли это?

Page 18: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

18

Multiple INSERT – возможно ли это?

• MySQL: из коробки – НЕТ, использовать “хуки” – ДА;

Page 19: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

19

Multiple INSERT – возможно ли это?

• Oracle – ДА, но цена?

Page 20: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

20

Multiple INSERT – возможно ли это?

• NoSQL/MongoDB – а зачем?> db.collection.insert({ id : 1, username: user, password: somepass, group: { id : 1, name: administrator } });

Page 21: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

21

Ключи и индексы

Page 22: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

22

Индексы: типы, опции и комманды• Индексные ключи

db.collection.ensureIndex({‘group.name’:1});• Уникальные “unique” ключи

db.collection.ensureIndex({‘group.name’:1},{unique:true});• Опция “dropDups”;

MEMORY

User country: BLR

Pointer to uid = 1

Pointer to uid = 4

Pointer to uid = 7

Pointer to uid = 10

User country: GBR

Pointer to uid = 2

Pointer to uid = 5

Pointer to uid = 8

Pointer to uid = 11

User country: USA

Pointer to uid = 3

Pointer to uid = 6

Pointer to uid = 9

Pointer to uid = 12

• db.collection.totalIndexSize();

• Разбросанные “sparse” ключи;

Page 23: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

23

Оптимизация и масштабирование

Memory Mapped Filesпрямое отображение байлов в память “сквозь” буфер обмена;

Page 24: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

24

Оптимизация и масштабирование

• Capped collections / Round-robin Database:

При заполнении всего отведенного места, записи удаляются по принципу FIFO

Page 25: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

25

Оптимизация и масштабирование

•Mater / Slave replication;• Replica set;

Page 26: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

26

Оптимизация и масштабирование

• Sharding (sparse):Shard servers

Shard key “country: BLR”

Pointer to uid = 1

Pointer to uid = 4

Pointer to uid = 7

Pointer to uid = 10

Shard key “country: GBR”

Pointer to uid = 2

Pointer to uid = 5

Pointer to uid = 8

Pointer to uid = 11

Shard key “country: USA”

Pointer to uid = 3

Pointer to uid = 6

Pointer to uid = 9

Pointer to uid = 12

Page 27: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

27

Тонкости и нюансы

Page 28: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

28

1. Все возвращаемые объекты в PHP по умолчанию являются ассоциативными массивами;

Page 29: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

29

2. Индексы должны помещаться в память db.collection.totalIndexSize();

3. Чем больше объект, тем ниже скорость записи (экпоненциально) db.collection.batchInsert([{…}, {…},..]);

1’000 записей1Kb документ1Mb пакет

x=

Page 30: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

30

4. Чем больше подключений, тем больше памяти расходуется (линейно);

5. Очень медленно работает REMOVE. После каждого атомарного удаления перестраивается индекс? db.collection.dropIndexes(); db.collection.remove({id:{$lte:100}}); db.collection.ensureIndex({id:1}); Используйте DROP; db.collection.drop();

6. Для обновления используйте Safe Mode.

Page 31: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

31

Вывод

• MongoDB – быстрая и легко масштабируемая база данных;• Понятный синтаксис

(JSON/JavaScript);• Адаптирована для

высоконагруженных систем;• Избыточна, без “foreign keys”.

Page 32: MongoDB. Области применения, преимущества и узкие места, тонкости использования в высоконагруженных системах

32

Спасибо за внимание.Вопросы?