0
MongoDBОбласти применения, преимущества и узкие места,тонкости использования в высоконагруженных системах.                ...
Что такое NoSQL?Основная цель подхода —  расширить возможности  базы данных там, где SQL  недостаточно гибок…             ...
В основе идей NoSQL лежит следующее:1. Нереляционная модель данных; RDBMS              NoSQL                              ...
2. Открытый   исходный код;3. Хорошая горизонтальная   масштабируемость “из коробки”;MySQL Community      MongoDB   4 node...
УстановкаWindows – качаем и ставим: > mongod --logpath /var/log --logappend --dbpath /var/data --installUbuntu/Linux – ста...
Проблемы репозиториевMongoDB database versions• Ubuntu 10.04 LTS (AWS default) - 1.2.2• Mongodb.org – 2.0.5MongoDB PHP dri...
Динамические базы и коллекции1. Не надо знать, существует ли база;2. Не надо знать структуру базы;3. Не надо знать имя кол...
Динамические базы и коллекции$mongo = new Mongo;$mongo->database->collection->insert(array(    “id” => 1,    “name” => “us...
Динамические базы и коллекции$mongo->database->collection->find(array(“id”:1));  array(      “id” => 1,      “name” => “us...
JSON-style and JavaScript• Весь синтаксис запросов построен на основе  JSON-объектов:  > use database  > db.collection    ...
SQL to Mongo mapping chart                             11
MySQL Join vs. Embed document                                12
2 таблицы = одна коллекцияMySQL                             MongoDBTABLE USER                        {id INT (10) AUTO_INC...
Область применения                     14
Производительность и масштабиремость                       Memcached / Key-value MongoDB / NoSQL                    MySQL ...
{    "id": "1234567893",    "at": 2,    "tmax": 120,    "imp": [       {          "id": "1",          "video": {          ...
Multiple INSERT – возможно ли это?                                     17
Multiple INSERT – возможно ли это?• MySQL: из коробки – НЕТ,  использовать “хуки” – ДА;                                   ...
Multiple INSERT – возможно ли это?• Oracle – ДА, но цена?                                     19
Multiple INSERT – возможно ли это?• NoSQL/MongoDB – а зачем?     > db.collection.insert({         id : 1,         username...
Ключи и индексы                  21
Индексы: типы, опции и комманды• Индексные ключи  db.collection.ensureIndex(,‘group.name’:1-);• Уникальные “unique” ключи ...
Оптимизация и масштабированиеMemory Mapped Filesпрямое отображениебайлов в память“сквозь” буфер обмена;                   ...
Оптимизация и масштабирование• Capped collections /  Round-robin Database:                  При заполнении                ...
Оптимизация и масштабирование• Mater / Slave replication;• Replica set;                                 25
Оптимизация и масштабирование• Sharding (sparse):Shard servers Shard key              Shard key             Shard key “cou...
Тонкости и нюансы                    27
1. Все возвращаемые объекты в PHP по умолчанию   являются ассоциативными массивами;                                       ...
2. Индексы должны помещаться в память   db.collection.totalIndexSize();3. Чем больше объект, тем ниже скорость   записи (э...
4. Чем больше подключений, тем больше   памяти расходуется (линейно);5. Очень медленно работает REMOVE.   После каждого ат...
Вывод• MongoDB – быстрая и легко  масштабируемая база данных;• Понятный синтаксис  (JSON/JavaScript);• Адаптирована для  в...
Спасибо за внимание.Вопросы?                       32
Upcoming SlideShare
Loading in...5
×

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

6,041

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,041
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
40
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. MongoDBОбласти применения, преимущества и узкие места,тонкости использования в высоконагруженных системах. Александр Чайка <marco.manti@gmail.com>, 06/2012 1
  2. 2. Что такое NoSQL?Основная цель подхода — расширить возможности базы данных там, где SQL недостаточно гибок… 2
  3. 3. В основе идей NoSQL лежит следующее:1. Нереляционная модель данных; RDBMS NoSQL 3
  4. 4. 2. Открытый исходный код;3. Хорошая горизонтальная масштабируемость “из коробки”;MySQL Community MongoDB 4 nodes 1’000 nodes 4
  5. 5. УстановкаWindows – качаем и ставим: > mongod --logpath /var/log --logappend --dbpath /var/data --installUbuntu/Linux – ставим в ручную: https://github.com/mongodb/mongo.git apt-get install mongodb 5
  6. 6. Проблемы репозиториевMongoDB database versions• Ubuntu 10.04 LTS (AWS default) - 1.2.2• Mongodb.org – 2.0.5MongoDB PHP driver versions• PEAR channel – 1.2.1• GITHub official – 1.2.5 6
  7. 7. Динамические базы и коллекции1. Не надо знать, существует ли база;2. Не надо знать структуру базы;3. Не надо знать имя коллекции (таблицы);4. У каждого документа (строки) может быть своя структура. 7
  8. 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”)); 8
  9. 9. Динамические базы и коллекции$mongo->database->collection->find(array(“id”:1)); array( “id” => 1, “name” => “user”, “pass” => “pass” ); array( “id” => 1, “action” => “control”, “desc” => “description” ); 9
  10. 10. JSON-style and JavaScript• Весь синтаксис запросов построен на основе JSON-объектов: > use database > db.collection .find({ id: {$ne: 1}}, { name: 1}) .sort(, ‘group.id’:-1, id:-1}) .limit(10);• Для внутреннего хранения используется BSON – бинарное представление JSON. 10
  11. 11. SQL to Mongo mapping chart 11
  12. 12. MySQL Join vs. Embed document 12
  13. 13. 2 таблицы = одна коллекцияMySQL MongoDBTABLE USER {id INT (10) AUTO_INCREMENT id : 1,group_id INT (10) NOT NULL username: user,username VARCHAR (255) NOT NULL password: somepass,password VARCHAR (32) NOT NULL group: { id : 1,TABLE GROUP name: administratorid INT (10) AUTO_INCREMENT }name VARCHAR (255) NOT NULL } 13
  14. 14. Область применения 14
  15. 15. Производительность и масштабиремость Memcached / Key-value MongoDB / NoSQL MySQL / RDBMSФункциональность Целостность данных 15
  16. 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", } }} 16
  17. 17. Multiple INSERT – возможно ли это? 17
  18. 18. Multiple INSERT – возможно ли это?• MySQL: из коробки – НЕТ, использовать “хуки” – ДА; 18
  19. 19. Multiple INSERT – возможно ли это?• Oracle – ДА, но цена? 19
  20. 20. Multiple INSERT – возможно ли это?• NoSQL/MongoDB – а зачем? > db.collection.insert({ id : 1, username: user, password: somepass, group: { id : 1, name: administrator } }); 20
  21. 21. Ключи и индексы 21
  22. 22. Индексы: типы, опции и комманды• Индексные ключи db.collection.ensureIndex(,‘group.name’:1-);• Уникальные “unique” ключи db.collection.ensureIndex(,‘group.name’:1-,,unique:true});• Опция “dropDups”;• Разбросанные “sparse” ключи; MEMORY User country: BLR User country: GBR User country: USA Pointer to uid = 1 Pointer to uid = 2 Pointer to uid = 3 Pointer to uid = 4 Pointer to uid = 5 Pointer to uid = 6 Pointer to uid = 7 Pointer to uid = 8 Pointer to uid = 9 Pointer to uid = 10 Pointer to uid = 11 Pointer to uid = 12• db.collection.totalIndexSize(); 22
  23. 23. Оптимизация и масштабированиеMemory Mapped Filesпрямое отображениебайлов в память“сквозь” буфер обмена; 23
  24. 24. Оптимизация и масштабирование• Capped collections / Round-robin Database: При заполнении всего отведенного места, записи удаляются по принципу FIFO 24
  25. 25. Оптимизация и масштабирование• Mater / Slave replication;• Replica set; 25
  26. 26. Оптимизация и масштабирование• Sharding (sparse):Shard servers Shard key Shard key Shard key “country: BLR” “country: GBR” “country: USA” Pointer to uid = 1 Pointer to uid = 2 Pointer to uid = 3 Pointer to uid = 4 Pointer to uid = 5 Pointer to uid = 6 Pointer to uid = 7 Pointer to uid = 8 Pointer to uid = 9 Pointer to uid = 10 Pointer to uid = 11 Pointer to uid = 12 26
  27. 27. Тонкости и нюансы 27
  28. 28. 1. Все возвращаемые объекты в PHP по умолчанию являются ассоциативными массивами; 28
  29. 29. 2. Индексы должны помещаться в память db.collection.totalIndexSize();3. Чем больше объект, тем ниже скорость записи (экпоненциально) db.collection.batchInsert(*,…-, ,…-,..+); 1’000 записей x = 1Kb документ 1Mb пакет 29
  30. 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. 30
  31. 31. Вывод• MongoDB – быстрая и легко масштабируемая база данных;• Понятный синтаксис (JSON/JavaScript);• Адаптирована для высоконагруженных систем;• Избыточна, без “foreign keys”. 31
  32. 32. Спасибо за внимание.Вопросы? 32
  1. A particular slide catching your eye?

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

×