際際滷

際際滷Share a Scribd company logo
丐丶 
丶亊 
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
 弍亠从 于 从仂仍仍亠从亳亳 仂亟亠亢亳 仆亠仂弍仂亟亳仄亠 亠仄 亟舒仆仆亠.
 仂仗仂仍仆亳亠仍仆舒 仍仂亢仆仂 仂亞舒仆亳亰舒亳亳 舒仆亰舒从亳亶 仄仂亢亠
仗亳于仂亟亳 从 仆舒亠仆亳 亠仍仂仆仂亳 亟舒仆仆 仄亠亢亟 舒亰仆仄亳
从仂仍仍亠从亳礆亳 于 仂仗亠亟亠仍亠仆仆亠 仄仂仄亠仆 于亠仄亠仆亳.
 亞舒仆亳亠仆仆仂 于仂亠仆仆 仄亠舒仆亳亰仄仂于 仍仂从 亳
亟亠于仂于亳亟仆舒 从舒 仂弍亠从舒 仗仂弍亢亟舒亠 从
亟亠仆仂仄舒仍亳亰舒亳亳.
 豫丼
 亳 亳仗仂仍亰仂于舒仆亳亳 仍ミ頴笑覚 亳仆仄亠仆舒 仆亢仆仂 仗仂仆亳仄舒 亠亞仂
仗亠亳仄亠于舒 亳 仆亠亟仂舒从亳.
 亳 仗仂亠从亳仂于舒仆亳亳 仗亳仍仂亢亠仆亳 仆亢仆仂 仗仂仆亳仄舒
仂亞舒仆亳亠仆亳 亳仆仄亠仆仂于 亳 仗仂仂弍 弍仂弍  仆亳仄亳.
 亠仄亠于舒 舒仂 仗亠亠于亠亳于舒ム 亟仂仗仂仍仆亳亠仍仆亠 亰舒舒
舒亟舒仗舒亳亳 仗仂亟 于舒 亰舒亟舒.

More Related Content

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. 豫丼 亳 亳仗仂仍亰仂于舒仆亳亳 仍ミ頴笑覚 亳仆仄亠仆舒 仆亢仆仂 仗仂仆亳仄舒 亠亞仂 仗亠亳仄亠于舒 亳 仆亠亟仂舒从亳. 亳 仗仂亠从亳仂于舒仆亳亳 仗亳仍仂亢亠仆亳 仆亢仆仂 仗仂仆亳仄舒 仂亞舒仆亳亠仆亳 亳仆仄亠仆仂于 亳 仗仂仂弍 弍仂弍 仆亳仄亳. 亠仄亠于舒 舒仂 仗亠亠于亠亳于舒ム 亟仂仗仂仍仆亳亠仍仆亠 亰舒舒 舒亟舒仗舒亳亳 仗仂亟 于舒 亰舒亟舒.