Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDb в современных веб-сервисах

Dd3f18c87b851137000c7427d7bd5d32?s=47 fwdays
November 14, 2011

MongoDb в современных веб-сервисах

* NoSql, общее описание концепций
* Отличия от реляционных БД, храним объекты
* MongoDb + PHP (Zend Framework)
* MongoDb и Sphinx
* Оптимизация работы MongoDb
* Шардинг, репликация
* Производительность MongoDb

Dd3f18c87b851137000c7427d7bd5d32?s=128

fwdays

November 14, 2011
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. MongoDb в современных веб-сервисах Сергей Черепанов http://twitter.com/cheggaaa http://facebook.com/cheggaaa cheggaaa@gmail.com

  2. Почему MongoDb ?  Документоориентированная БД  Простота  Скорость

     Масштабируемость  Гибкость
  3. MongoDb + PHP ?  Установка pecl install mongo 

    Документация http://php.net/mongo  Код https://github.com/mongodb/mongo-php-driver
  4. MongoDb + PHP (native driver) // соединяемся $m = new

    Mongo(); // выбираем БД $db = $m->myDb; // получаем коллекцию $collection = $db->myCollection; // добавляем запись $obj = array( "title" => "One", "description" => "Number one" ); $collection->insert($obj); // выбираем все $cursor = $collection->find(); // смотрим что выбрали foreach ($cursor as $obj) { echo $obj["title"] . "\n"; }
  5. MongoDb ORM  Свободная структура  Простота  Поддержка встроенных

    операций  Поддержка работы с массивами
  6. MongoDb + PHP + Zend Framework  Doctrine Object Document

    Mapper http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/  Shanty Mongo https://github.com/coen-hyde/Shanty-Mongo
  7. Shanty Mongo  Простота  Гибкость  Вложенные объекты 

    DocumentSets  Наследование моделей  Хуки  Batch Inserting
  8. Shanty Mongo class Product extends Shanty_Mongo_Document { protected static $_db

    = 'shop'; protected static $_collection = 'product'; protected static $_requirements = array( 'name' => 'Required', 'price' => 'Required', ); }
  9. Shanty Mongo // создаем новый продукт $product = new Product();

    $product->name = 'Megabibus'; $product->count = 0; $product->params = array( 'size' => 'XL', 'color' => 'red', ); $product->save(); // получаем продукт по id $product = Product::find($id); // инкремент $product->inc('count', 1); // выборка $products = Product::all(array('params.size' => 'XL'));
  10. Храним объекты  Все свойства в документе  Минимальная связанность

     Связи - через встраивание - через ссылки
  11. Храним объекты { name : "Product name", descr : "Long

    text", price : 3000 }
  12. Храним объекты { name : "Product name", descr : "Long

    text", price : 3000, params: { size : "XL", color: "red" } }
  13. Храним объекты { name : "Product name", descr : "Long

    text", price : 3000, params: { size : "XL", color: "red" }, comments : [ {name : "Alex", text : "Good"}, {name : "Pavel", text : "Bad"} . . . ] }
  14. MongoDb + Search Engines  Sphinx - xml  Elasticsearch

    - json api
  15. Надежность  Репликация (ReplicaSet)  Журналирование  safe => true

     fsync => true
  16. Шардинг  Автошардинг mongos + config server + mongod 

    Горячее добавление шард  Произвольный ключ
  17. Оптимизация  Индексы - unique - sparse  Количество БД

     Названия свойств  Журналирование
  18. Мониторинг  mongostat  mongotop  explain  http://mms.10gen.com

  19. ?