
MongoDB рдПрдХ рд╢рд╛рдирджрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реБрдЖ рд╣реИред SQL рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдкреНрд░рд╢реНрди рд╣реИ:
MongoDB рд▓реЗрдирджреЗрди? ред
рдпрджрд┐ рдЖрдк рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИред
MongoDB doesn't support complex multi-document transactions. If that is something you absolutely need it probably isn't a great fit for you.
If transactions are required, perhaps NoSQL is not for you. Time to go back to ACID relational databases.
MongoDB does a lot of things well, but transactions is not one of those things.
рд▓реЗрдХрд┐рди рд╣рдо MVCC рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд▓реЗрдирджреЗрди (ACID
* ) рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдиреАрдЪреЗ рдПрдХ рдХрд╣рд╛рдиреА рд╣реИ рдХрд┐ рдпреЗ рд▓реЗрди-рджреЗрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ,
GitHub (рдзреНрдпрд╛рди рд╕реЗ, рдЬрд╛рд╡рд╛) рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдкреЛрд╕реНрдЯ MongoDB рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрди-рджреЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛-рдФрд░-рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдЙрд╕реА рд╣рдж рддрдХ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рднрдВрдбрд╛рд░рдг рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдореЙрдбрд▓
рдХрдИ рдЕрдиреНрдп NoSQL рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, MongoDB рддреБрд▓рдирд╛ рдФрд░ рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕ рд╕рдорд░реНрдерди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ ACID рд▓реЗрдирджреЗрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреИрд╕ рд╕рдорд░реНрдерди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HBase, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдпрд╛ рдЬрд╝реВрдХреЗрдЯрд░) рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп NoSQL рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреИрд╕ рдХреНрдпрд╛ рд╣реИ?
, , . - , , .
рджрд░рдЕрд╕рд▓, рд▓реЗрди-рджреЗрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдмреИрдВрдХ рдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдиреАрдЪреЗ рдПрдХ рдЦрд╛рддрд╛ рдореЙрдбрд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред
| рдирд┐рд░рд╛рд╢реНрд░рдп | рдмрдЪрд╛рд╡ рдкрдХреНрд╖ |
рдЖрджрд░реНрд╢ | { _id : ObjectId(".."), name : "gov", balance : 600 } | { _id : ObjectId(".."), version : 0, value : { name : "gov", balance : 600 } } |
рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди | db.accounts.update( { _id:ObjectId("...") }, { name:"gov", balance:550 } ); | db.accounts.update({ _id: ObjectId("..."), version: 0 },{ version : 1, value : { name:"gov", balance:550 } }); |
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдирд╛ рдЙрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореЙрдбрд▓ рдЬреИрд╕реЗ:
{ _id : ObjectId(".."), version : 0, value : { name : "gov", balance : 600 }, updated : null, tx : null }
рдЬреЛрдбрд╝реЗ рдЧрдП рдлрд╝реАрд▓реНрдб - рдЕрджреНрдпрддрди рдФрд░ txред рдпрд╣ рдУрд╡рд░рд╣реЗрдб рд╣реИ рдЬреЛ рд▓реЗрдирджреЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдореВрд▓реНрдп рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ - рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рд▓реЗрдирджреЗрди рдХреЗ рдЧреБрдЬрд░рдиреЗ рдкрд░ рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛; tx, рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ - рдПрдХ рд╡рд╕реНрддреБ рдХреЗ _id рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдЬреЛ рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред рд▓реЗрди-рджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рднреА рдХреИрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕рдХреА рд╢реБрджреНрдзрддрд╛ рд╕реНрдкрд╖реНрдЯ рдереА, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓; рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рддреНрдп рдХрдерди, рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдФрд░ рдЧреБрдг рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд░рдЪрдирд╛ рдмрд╛рдж рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред
- рдорд╛рди рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЕрддреАрдд рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд╕рдЪ рдереА
- рд░реАрдб рдСрдкрд░реЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- рд░реАрдб рдСрдкрд░реЗрд╢рди рдЗрдореНрдкреЛрдЯреЗрдВрдЯ рд╣реИ
- рдПрдХ рд╡рд╕реНрддреБ рддреАрди рдЕрд╡рд╕реНрдерд╛рдУрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ: рд╕реНрд╡рдЪреНрдЫ - рдЧ, рдЧрдиреНрджрд╛ рдЕрдкреНрд░рд╛рдкреНрдд - рдж, рдЧрдиреНрджрд╛ рдЕрдкреНрд░рд╛рдкреНрдд - рджреН
- рдПрдХ рд▓реЗрди-рджреЗрди рдореЗрдВ, рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реА
- рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдХреНрд░рдордг: рд╕реА тЖТ рдбреА, рдбреА тЖТ рд╕реА, рдбреА тЖТ рдбреАрд╕реА, рдбреАрд╕реА тЖТ рд╕реА
- рд▓реЗрди-рджреЗрди-рдЖрд░рдВрдн рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди: c тЖТ d, d тЖТ dc, dc тЖТ c
- рдкрдврд╝рддреЗ рд╕рдордп рд╕рдВрднрд╡ рд╕рдВрдХреНрд░рдордг: рдбреА тЖТ рд╕реА
- рдпрджрд┐ рдХреЛрдИ рд╕рдВрдХреНрд░рдордг d тЖТ c рдерд╛, рддреЛ рдЬрд┐рд╕ рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрджрд░ рд╕рдВрдХреНрд░рдордг c тЖТ d рдерд╛, рд╡рд╣ рдХрдорд┐рдЯ рд╣реЛрдиреЗ рдкрд░ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИ
- рдЧрд┐рд░реЗ рд╣реБрдП рд░реАрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдЧрд┐рд░реЗ рд╣реБрдП рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- рдпрджрд┐ рдХрдорд┐рдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрд╛рд░рд┐рдд рд╣реБрдЖ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ рд▓реЗрдирджреЗрди рджреЛрд╣рд░рд╛рдПрдВ
- рдпрджрд┐ рд▓реЗрди-рджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ (_id = tx) рд╣рдЯрд╛ рджреА рдЧрдИ рдереА, рддреЛ рд▓реЗрдирджреЗрди рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛
рд░рд╛рдЬреНрдпреЛрдВ
рдПрдХ рд╕рдлрд▓ рд╕реНрдерд┐рддрд┐ рдПрдХ рд╕рдлрд▓ рд▓реЗрдирджреЗрди рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: рдореВрд▓реНрдп рдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рдФрд░ tx рд╢реВрдиреНрдп рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ рдЧрдВрджрд╛ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рдЬреНрдп рд▓реЗрдирджреЗрди рдХреЗ рд╕рдордп рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЕрджреНрдпрддрди рдореЗрдВ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ tx рд▓реЗрди-рджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХрд╛ _id рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╕реНрддреБ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИред
рдПрдХ рдЧрдВрджреЗ рдкреНрд░рддрд┐рдмрджреНрдз рд░рд╛рдЬреНрдп рдПрдХ рд╕рдлрд▓ рд▓реЗрдирджреЗрди рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдЦреБрдж рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧрд┐рд░ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдореЗрдВ рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг, tx - _id рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рд╡рд╕реНрддреБ рдкрд╣рд▓реЗ рд╣реА рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИред
рд▓реЗрди-рджреЗрди
- рд╣рдо рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ рд▓реЗрдирджреЗрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ
- рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ (tx)
- рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдирдП рдореВрд▓реНрдп рдореЗрдВ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ tx - tx._id рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- Tx рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╛рдПрдВ
- рд╣рдо рдЕрджреНрдпрддрди, рдФрд░ tx рдФрд░ рдЕрджреНрдпрддрди nullify рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдкрдврд╝рдирд╛
- рд╡рд╕реНрддреБ рдкрдврд╝реЗрдВ
- рдпрджрд┐ рдпрд╣ рд╕рд╛рдл рд╣реИ - рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
- рдпрджрд┐ рдЧрдВрджрд╛ рд╣реИ, рддреЛ рд╣рдо рдореВрд▓реНрдп рдХреЛ рдЕрджреНрдпрддрди, рдФрд░ tx рдФрд░ рдЕрджреНрдпрддрд┐рдд рд╢реВрдиреНрдп рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рдпрджрд┐ рдЧрдВрджрд╛ рдПрдХ рдирд╣реАрдВ рд╣реИ - tx рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓реЗрдВ, рдЕрджреНрдпрддрди рдФрд░ tx рдХреЛ nullify рдХрд░реЗрдВ
- рдЪрд░рдг # 1 рдкрд░ рдЬрд╛рдПрдВ
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдм рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ, рд╣реЛрдорд╡рд░реНрдХ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЧреБрдг рдФрд░ рдХрдерди рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ ACID рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдордиреЗ MongoDB рдореЗрдВ рд▓реЗрдирджреЗрди рдЬреЛрдбрд╝рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдирдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдХреБрдЫ рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ
- рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реБрд╕рдВрдЧрдд рд╣реИ, рд▓реЗрди-рджреЗрди рдЦреЛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ) рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдорд┐рд▓реА рдХрд┐ рд░рд┐рдХреЙрд░реНрдб рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рдЦреЛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ (рд▓реЙрдЧрд┐рдВрдЧ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рдореЛрдВрдЧрд╛ рдпрд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ)
- рд▓реЗрди-рджреЗрди рдЖрд╢рд╛рд╡рд╛рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ
- 2n + 2 рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ n рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╕рдордп рдХреЗ рд╕рд╛рде, рд╣рдо рдЧрд┐рд░рд╛рдП рдЧрдП рд▓реЗрдирджреЗрди рд╕реЗ tx рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрдорд╛ рдХрд░реЗрдВрдЧреЗ - рд╕рдордп-рд╕рдордп рдкрд░ рд╣рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛
ред
рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди
рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдирджреЗрди рдХреЛ рддреЗрдЬ рдФрд░ рдЕрдХреНрд╖рдо рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?
рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдПрдХ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рдордп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реИрд╢ рдХреЗ рдХрд╛рд░рдг рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рджреВрд╕рд░реЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
рдореИрдВ рдПрдХрд▓-рдиреЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдореЛрдВрдЧрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рд▓реЗрдирджреЗрди рдореЗрд░реА рдорджрдж рдХрд░реЗрдВрдЧреЗ?
рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рдЬрд░реНрдирд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдИрдорд╛рдирджрд╛рд░ рдПрд╕реАрдЖрдИрдбреА тАЛтАЛрд▓реЗрдирджреЗрди рдорд┐рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╛рд╡рд┐рдд рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдкреНрд░рддрд┐рдХреГрддрд┐ред рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕рд╣рдордд рд╣реИрдВ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рд▓реЗрдирджреЗрди рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкрд╣реБрдВрдЪ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░рддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЦреЛрдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдПрдХ рдиреЛрдб рдЧрд┐рд░рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдиреЛрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рджреЛ-рдЪрд░рдг рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдВрдЧрд▓реА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде:
- рдПрдХ рддрддреНрд╡ рдкрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕рд░рд╛рд╣рдиреАрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рд╕рдорд╛рдирддрд╛ рдЕрдм рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ)
- рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рдЖрдИрдбреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрди рдереНрд░реЗрдбреНрд╕ рдХреЛ рдХрднреА рднреА рдорд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдиреНрдпрдерд╛, рд╕рдВрдЧрддрддрд╛ рдФрд░ рдЙрдкрд▓рдмреНрдзрддрд╛ рдЦреЛ рдЬрд╛рддреА рд╣реИ (рдЬрдореЗ рд╣реБрдП рд▓реЗрдирджреЗрди рд╕рдВрднрд╡ рд╣реИрдВ - рдПрдХрдорд╛рддреНрд░ рдЙрдЪрд┐рдд рдХрджрдо рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЗрди рд▓реЗрдирджреЗрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ)ред