SQLite рдореЗрдВ ACID

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ SQLite рдореЗрдВ рдПрдЯреЛрдореЗрд╕реА, рд╕реНрдерд┐рд░рддрд╛, рдЕрд▓рдЧрд╛рд╡ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ (ACID) рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдкреЗрдЬрд░ рдореЙрдбреНрдпреВрд▓



SQLite рд╕рдВрд╕реНрдХрд░рдг 3 рдореЗрдВ рд▓реЙрдХ рдФрд░ рд╕рдорд╡рд░реНрддреА рдкрд╣реБрдВрдЪ рдкреЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдореЙрдбреНрдпреВрд▓ ACID рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкреЗрдЬрд░ рдбреЗрдЯрд╛рдмреЗрд╕, рдмреА - рдЯреНрд░реА, рдЗрдВрдбреЗрдХреНрд╕ рдЖрджрд┐ рдХреЗ рдПрдирдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреЗ рдмреНрд▓реЙрдХ (рдкреЗрдЬ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рд╣реИред рдкреЗрдЬрд░ рдУрдПрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдПрд╕ рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, "рдереНрд░реЗрдб", "рдкреНрд░реЛрд╕реЗрд╕" рдФрд░ "рдереНрд░реЗрдб" рд╕рдорддреБрд▓реНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред



рдЕрд╡рд░реБрджреНрдз



рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз 5 рд▓реЙрдХ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ:





рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдЦрдВрдбрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред



рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо



рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

  1. рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдпрджрд┐ SQLITE_BUSY рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╕рд╛рдЭрд╛ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  2. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдзрд╛рд░ рдореЗрдВ рд╣реЙрдЯ рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдЪрд░рдг 3ред
  3. PENDING рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ EXCLUSIVE рд▓реЙрдХ рдХрд░реЗрдВред рдпрджрд┐ рд▓реЙрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рдкрд╕ рдЪрд▓ рд░рд╣реА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рднреА рддрд╛рд▓реЗ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ SQLITE_BUSY рд▓реМрдЯреЗрдВ ред
  4. рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдФрд░ рдорд╛рд╕реНрдЯрд░ рд▓реЙрдЧ рдкрдврд╝реЗрдВ (рдХрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ (рдорд╛рд╕реНрдЯрд░ рдЬрд░реНрдирд▓), рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд▓рдЧреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ)ред
  5. рд░реЛрд▓ рд╡рд╛рдкрд╕
  6. рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдПрдВ (PRAGMA рдХрдорд╛рдВрдб рдХреЗ journal_mode рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ , рд╡рд┐рд▓реЛрдкрди рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ)ред
  7. рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд▓реЙрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛рдПрдБред
  8. PENDING рдФрд░ EXCLUSIVE рддрд╛рд▓реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди SHARED рд▓реЙрдХ рдЫреЛрдбрд╝реЗрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрдврд╝реЗрдВред




рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо



рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╣рд▓реЗ рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  1. рд╢реЗрдпрд░ рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрдврд╝рдирд╛)ред
  2. рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд╛рд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ SQLITE_BUSY рд╡рд╛рдкрд╕ рдХрд░реЗрдВ ред
  3. рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдмрдирд╛рдПрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рд▓реЙрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдирд╛рдо, рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд▓реЙрдЧ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рдЗрд╕ рдкреЗрдЬ рдХреЛ рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЦрддреА рд╣реИред рд╕рдВрд╢реЛрдзрд┐рдд рдкреГрд╖реНрда рдореБрдЦреНрдп рд░реВрдк рд╕реЗ RAM рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ, рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреА рд╣реИрдВред рдпрджрд┐ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ COMMIT рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд░рд╣реА рд╣реИ, рдпрд╛ рдпрджрд┐ рдореЗрдореЛрд░реА рднрд░ рдЧрдИ рд╣реИ, рддреЛ рдЪрд░рдг 5 рдкрд░ рдЬрд╛рдПрдВред
  5. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдбреЗрдЯрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред
  6. PENDING рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ EXCLUSIVE рд▓реЙрдХ рдХрд░реЗрдВред рдпрджрд┐ рд▓реЙрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  7. рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░реИрдо рд╕реЗ рдбрд┐рд╕реНрдХ рддрдХ рд╕рднреА рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВ (рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рд░реИрдо рдУрд╡рд░рдлреНрд▓реЛ рдерд╛, рддреЛ рдЪрд░рдг 4 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ)ред
  8. рд░реЛрд▓рдмреИрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдПрдВ (PRAGMA рдХрдорд╛рдВрдб рдХреЗ journal_mode рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ , рд╡рд┐рд▓реЛрдкрди рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ)ред
  9. рд░рд┐рд▓реАрдЬрд┐рдВрдЧ рдФрд░ EXCLUSIVE рддрд╛рд▓реЗред




рдкрд░рдорд╛рдгреБ рдкреНрд░рддрд┐рдмрджреНрдз рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ: habrahabr.ru/post/181584



All Articles