Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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
Nächste SlideShare
Wird geladen in …5
×

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

9.761 Aufrufe

Veröffentlicht am

  • Als Erste(r) kommentieren

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

×