ТРАНЗАКЦИИ И
ДЕНОРМАЛИЗАЦИЯ В
MONGODB
JOIN
Transaction
Data
normalization
JOIN
 Иерархическая организация объектов.
 Слияние/объединение объектов на стороне клиента.
 Использование DBRef для ор...
ПРИМЕР ИСПОЛЬЗОВАНИЯ DBREF
 public class Post : Entity
 {
 public string Id { get; set; }
 public string Title { get; ...
TRANSACTION
 Можно использовать атомарность однодокументных
операций
 Использование дополнительных паттернов. Например,
...
ПРИМЕР ИСПОЛЬЗОВАНИЯ COMMIT В 2
ШАГА
 db.accounts.save({name: "A", balance: 1000, pendingTransactions: []})
 db.accounts...
ACID
 Atomicity
 Consistency
 Isolation
 Durability
DATA NORMALIZATION
 Объект в коллекции содержит необходимые ему данные.
 Дополнительная сложность организации транзакций...
В ЗАКЛЮЧЕНИЕ
 При использовании любого инструмента нужно понимать его
преимущества и недостатки.
 При проектировании при...
Upcoming SlideShare
Loading in …5
×

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

460 views
363 views

Published on

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

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
460
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. ТРАНЗАКЦИИ И ДЕНОРМАЛИЗАЦИЯ В MONGODB
  2. 2. JOIN Transaction Data normalization
  3. 3. JOIN  Иерархическая организация объектов.  Слияние/объединение объектов на стороне клиента.  Использование DBRef для организации связей между коллекциями и «ленивой» загрузки.  Усложняются опреации агрегирования с участием разных коллекций.  Требует более тщательного проектирования.
  4. 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. 5. TRANSACTION  Можно использовать атомарность однодокументных операций  Использование дополнительных паттернов. Например, commit в 2 шага.  ACID?
  6. 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. 7. ACID  Atomicity  Consistency  Isolation  Durability
  8. 8. DATA NORMALIZATION  Объект в коллекции содержит необходимые ему данные.  Дополнительная сложность организации транзакций может приводить к нарушению целосности данных между разными коллекциями в определенные моменты времени.  Ограниченность встроенных механизмов ссылок и древовидная структура объекта побуждает к денормализации.
  9. 9. В ЗАКЛЮЧЕНИЕ  При использовании любого инструмента нужно понимать его преимущества и недостатки.  При проектировании приложения нужно понимать ограничения инструментов и способы борьбы с ними.  Премущества часто перевешивают дополнительные затраты адаптации под вашу задачу.

×