SlideShare uma empresa Scribd logo
1 de 9
ТРАНЗАКЦИИ И
ДЕНОРМАЛИЗАЦИЯ В
MONGODB
JOIN
Transaction
Data
normalization
JOIN
 Иерархическая организация объектов.
 Слияние/объединение объектов на стороне клиента.
 Использование DBRef для организации связей между
коллекциями и «ленивой» загрузки.
 Усложняются опреации агрегирования с участием разных
коллекций.
 Требует более тщательного проектирования.
ПРИМЕР ИСПОЛЬЗОВАНИЯ DBREF
 public class Post : Entity
 {
 public string Id { get; set; }
 public string Title { get; set; }
 public string Summary { get; set; }
 public DateTime Added { get; set; }
 public DBRef Owner { get; set; }
 }

 var mongo = new Mongo(config.BuildConfiguration());
 mongo.Connect();
 var DB = mongo.GetDatabase(_dataBaseName)
 var post = new Post();
 post.Owner = new DBRef("User", userId); //First parameter is a mongoDB collection name and second is object id
 //To fetch object referenced by DBRef you should do following
 var owner = DB.FollowReference<User>(post.Owner);
TRANSACTION
 Можно использовать атомарность однодокументных
операций
 Использование дополнительных паттернов. Например,
commit в 2 шага.
 ACID?
ПРИМЕР ИСПОЛЬЗОВАНИЯ COMMIT В 2
ШАГА
 db.accounts.save({name: "A", balance: 1000, pendingTransactions: []})
 db.accounts.save({name: "B", balance: 1000, pendingTransactions: []})
 db.transactions.save({source: "A", destination: "B", value: 100, state: "initial"})
 db.transactions.update({_id: t._id}, {$set: {state: "pending"}})
 db.accounts.update({name: t.source, pendingTransactions: {$ne: t._id}}, {$inc: {balance: -t.value}, $push:
{pendingTransactions: t._id}})
 db.accounts.update({name: t.destination, pendingTransactions: {$ne: t._id}}, {$inc: {balance: t.value}, $push:
{pendingTransactions: t._id}})
 db.transactions.update({_id: t._id}, {$set: {state: "committed"}})
 db.accounts.update({name: t.source}, {$pull: {pendingTransactions: t._id}})
 db.accounts.update({name: t.destination}, {$pull: {pendingTransactions: t._id}})
 db.transactions.update({_id: t._id}, {$set: {state: "done"}})
ACID
 Atomicity
 Consistency
 Isolation
 Durability
DATA NORMALIZATION
 Объект в коллекции содержит необходимые ему данные.
 Дополнительная сложность организации транзакций может
приводить к нарушению целосности данных между разными
коллекциями в определенные моменты времени.
 Ограниченность встроенных механизмов ссылок и
древовидная структура объекта побуждает к
денормализации.
В ЗАКЛЮЧЕНИЕ
 При использовании любого инструмента нужно понимать его
преимущества и недостатки.
 При проектировании приложения нужно понимать
ограничения инструментов и способы борьбы с ними.
 Премущества часто перевешивают дополнительные затраты
адаптации под вашу задачу.

Mais conteúdo relacionado

Mais procurados

I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
ITmozg
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
Magecom Ukraine
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Глеб Тарасов
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
Evgeny Kompaniyets
 
Практическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation FrameworkПрактическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation Framework
Денис Кравченко
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Alexander Makarov
 

Mais procurados (20)

13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
Практическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation FrameworkПрактическое применение MongoDB Aggregation Framework
Практическое применение MongoDB Aggregation Framework
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Web Internship - PHP and MySQL
Web Internship - PHP and MySQLWeb Internship - PHP and MySQL
Web Internship - PHP and MySQL
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 

Semelhante a Transactions and Denormalization in MongoDB - Artem Slobolinsky - Dnipropetrovsk MUG 140303

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
MobiDev
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
Jboss drools expert (ru)
Jboss drools expert (ru)Jboss drools expert (ru)
Jboss drools expert (ru)
Victor_Cr
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
DevDay
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf Conference
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
Technopark
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
MoscowDjango
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
Technopark
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
it-people
 

Semelhante a Transactions and Denormalization in MongoDB - Artem Slobolinsky - Dnipropetrovsk MUG 140303 (20)

Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Как писать под Android программы, а не код
Как писать под Android программы, а не кодКак писать под Android программы, а не код
Как писать под Android программы, а не код
 
Jboss drools expert (ru)
Jboss drools expert (ru)Jboss drools expert (ru)
Jboss drools expert (ru)
 
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложенияSECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 

Transactions and Denormalization in MongoDB - Artem Slobolinsky - Dnipropetrovsk MUG 140303

  • 3. JOIN  Иерархическая организация объектов.  Слияние/объединение объектов на стороне клиента.  Использование DBRef для организации связей между коллекциями и «ленивой» загрузки.  Усложняются опреации агрегирования с участием разных коллекций.  Требует более тщательного проектирования.
  • 4. ПРИМЕР ИСПОЛЬЗОВАНИЯ DBREF  public class Post : Entity  {  public string Id { get; set; }  public string Title { get; set; }  public string Summary { get; set; }  public DateTime Added { get; set; }  public DBRef Owner { get; set; }  }   var mongo = new Mongo(config.BuildConfiguration());  mongo.Connect();  var DB = mongo.GetDatabase(_dataBaseName)  var post = new Post();  post.Owner = new DBRef("User", userId); //First parameter is a mongoDB collection name and second is object id  //To fetch object referenced by DBRef you should do following  var owner = DB.FollowReference<User>(post.Owner);
  • 5. TRANSACTION  Можно использовать атомарность однодокументных операций  Использование дополнительных паттернов. Например, commit в 2 шага.  ACID?
  • 6. ПРИМЕР ИСПОЛЬЗОВАНИЯ COMMIT В 2 ШАГА  db.accounts.save({name: "A", balance: 1000, pendingTransactions: []})  db.accounts.save({name: "B", balance: 1000, pendingTransactions: []})  db.transactions.save({source: "A", destination: "B", value: 100, state: "initial"})  db.transactions.update({_id: t._id}, {$set: {state: "pending"}})  db.accounts.update({name: t.source, pendingTransactions: {$ne: t._id}}, {$inc: {balance: -t.value}, $push: {pendingTransactions: t._id}})  db.accounts.update({name: t.destination, pendingTransactions: {$ne: t._id}}, {$inc: {balance: t.value}, $push: {pendingTransactions: t._id}})  db.transactions.update({_id: t._id}, {$set: {state: "committed"}})  db.accounts.update({name: t.source}, {$pull: {pendingTransactions: t._id}})  db.accounts.update({name: t.destination}, {$pull: {pendingTransactions: t._id}})  db.transactions.update({_id: t._id}, {$set: {state: "done"}})
  • 7. ACID  Atomicity  Consistency  Isolation  Durability
  • 8. DATA NORMALIZATION  Объект в коллекции содержит необходимые ему данные.  Дополнительная сложность организации транзакций может приводить к нарушению целосности данных между разными коллекциями в определенные моменты времени.  Ограниченность встроенных механизмов ссылок и древовидная структура объекта побуждает к денормализации.
  • 9. В ЗАКЛЮЧЕНИЕ  При использовании любого инструмента нужно понимать его преимущества и недостатки.  При проектировании приложения нужно понимать ограничения инструментов и способы борьбы с ними.  Премущества часто перевешивают дополнительные затраты адаптации под вашу задачу.