Transaction

νŠΈλžœμž­μ…˜μ„ μ§€μ›ν•˜μ§€ μ•ŠλŠ” MyISAMκ³Ό νŠΈλžœμž­μ…˜μ„ μ§€μ›ν•˜λŠ” InnoDB 처리 λ°©μ‹μ—λŠ” 무슨 차이가 μžˆμ„κΉŒ.

MySQLμ—μ„œμ˜ νŠΈλžœμž­μ…˜

νŠΈλžœμž­μ…˜μ€ λ°˜λ“œμ‹œ μ—¬λŸ¬ 개의 λ³€κ²½ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 쿼리가 쑰합됐을 λ•Œλ§Œ 의미 μžˆλŠ” κ°œλ…μ€ μ•„λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ€ ν•˜λ‚˜μ˜ 논리적인 μž‘μ—… 셋에 쿼리가 ν•˜λ‚˜κ°€ μžˆλ“  두 κ°œκ°€ λ„˜λ“  관계없이 논리적인 μž‘μ—… μ…‹ μžμ²΄κ°€ 100% μ μš©λ˜κ±°λ‚˜(commit) 아무것도 μ μš©λ˜μ§€ μ•Šμ•„μ•Ό 함을 보μž₯ν•΄ μ£ΌλŠ” 것이닀.

κ°€μž₯ λ¨Όμ € 2개의 insert 쿼리λ₯Ό μˆ˜ν–‰ν•˜μ—¬ ν…Œμ΄λΈ”μ„ μ„ΈνŒ…ν•œλ‹€. κ·Έλ‹€μŒ 각 ν…Œμ΄λΈ” fdpk μ»¬λŸΌμ— 1, 2, 3을 μ‚½μž…ν•˜λŠ” 쿼리λ₯Ό μˆ˜ν–‰ν•˜κ³  select둜 κ²°κ³Όλ₯Ό μ‚΄νŽ΄λ³΄μž.

insert into table mysiam (fdpk) values (3);
insert into table innodb (fdpk) values (3);

insert into table mysiam (fdpk) values (1), (2), (3);
ERROR 1062: Duplicate entry '3' for key 'PRIMARY'
insert into table innodb (fdpk) values (1), (2), (3);
ERROR 1062: Duplicate entry '3' for key 'PRIMARY'

select * from mysaim;
=> fdpk: 1, 2, 3

select * from innodb
=> fdpk: 3

MyISAM ν…Œμ΄λΈ”μ—λŠ” 였λ₯˜κ°€ λ°œμƒν–ˆμŒμ—λ„ β€˜1’, β€˜2β€™λŠ” insertκ°€ λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ InnoDBλŠ” μΏΌλ¦¬μ—μ„œ 일뢀라도 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μ›μΉ™λŒ€λ‘œ 쿼리λ₯Ό μ‹€ν–‰ν•˜κΈ° μ „ μƒνƒœλ‘œ λ³΅κ΅¬ν•œλ‹€.

MyISAM ν…Œμ΄λΈ”μ—μ„œ λ°œμƒν•˜λŠ” μ΄λŸ¬ν•œ ν˜„μƒμ„ λΆ€λΆ„ μ—…λ°μ΄νŠΈ(Partial Update)라고 ν‘œν˜„ν•˜κ³  이 ν˜„μƒμ€ λ°μ΄ν„°μ˜ 정합성을 λ§žμΆ”λŠ” 데 μƒλ‹Ήνžˆ μ–΄λ ΅κ²Œ ν•œλ‹€.

μ£Όμ˜μ‚¬ν•­

νŠΈλžœμž­μ…˜ λ˜ν•œ DBMS의 컀λ„₯μ…˜κ³Ό λ™μΌν•˜κ²Œ κΌ­ ν•„μš”ν•œ μ΅œμ†Œμ˜ μ½”λ“œμ—λ§Œ μ μš©ν•˜λŠ” 것이 μ’‹λ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œμ—μ„œ νŠΈλžœμž­μ…˜μ˜ λ²”μœ„λ₯Ό μ΅œμ†Œν™”ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

λ‹€μŒ κ²Œμ‹œνŒ κ²Œμ‹œλ¬Ό μž‘μ„± ν›„ μ €μž₯ν•˜λŠ” μ˜ˆμ‹œμ˜ 절차 μ€‘μ—μ„œ, DBMS의 νŠΈλžœμž­μ…˜ μ²˜λ¦¬μ— μ’‹μ§€ μ•Šμ€ 영ν–₯을 λ―ΈμΉ˜λŠ” 뢀뢄을 μ‚΄νŽ΄λ³΄μž.

λ‚˜μœ 영ν–₯을 μ£ΌλŠ” λΆ€λΆ„

  • λ§Žμ€ κ°œλ°œμžκ°€ DB 컀λ„₯μ…˜ 생성(λ˜λŠ” ν’€μ—μ„œ κ°€μ Έμ˜€λŠ”)ν•˜λŠ” μ½”λ“œλ₯Ό 1번과 2번 사이에 κ΅¬ν˜„ν•˜κ³  λ™μ‹œμ— START TRANSACTION λͺ…λ ΉμœΌλ‘œ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•œλ‹€. 그리고 9번과 10번 μ‚¬μ΄μ—μ„œ νŠΈλžœμž­μ…˜μ„ commitν•˜κ³  μ’…λ£Œ(ν’€λ‘œ λ°˜λ‚©)ν•œλ‹€. μ‹€μ œλ‘œ DBMS에 데이터λ₯Ό μ €μž₯ν•˜λŠ” μž‘μ—…(νŠΈλžœμž­μ…˜)은 5λ²ˆλΆ€ν„° μ‹œμž‘λœλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. κ·Έλž˜μ„œ 2, 3, 4번의 μ ˆμ°¨κ°€ 빨리 μ²˜λ¦¬λœλ‹€κ³  ν•˜λ”λΌλ„ DBMS의 νŠΈλžœμž­μ…˜μ— ν¬ν•¨μ‹œν‚¬ ν•„μš”λŠ” μ—†λ‹€. 일반적으둜 DB 컀λ„₯μ…˜μ˜ κ°œμˆ˜κ°€ μ œν•œμ μ΄μ–΄μ„œ 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ΄ 컀λ„₯μ…˜μ„ μ†Œμœ ν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ–΄μ§€λ©΄ μ—¬μœ  μ»€λ…μ„Όμ˜ κ°œμˆ˜κ°€ 쀄어든닀. μ–΄λŠ μˆœκ°„μ—λŠ” 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ—μ„œ 컀λ„₯μ…˜μ„ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” 상황이 λ°œμƒν•  수 μžˆλ‹€.

  • 더 큰 μœ„ν—˜μ€ 8번 μž‘μ—…μœΌλ‘œ λ³Ό 수 μžˆλ‹€. 메일 전솑, FTP 파일 전솑, λ„€νŠΈμ›Œν¬λ₯Ό 톡해 원격 μ„œλ²„μ™€ ν†΅μ‹ ν•˜λŠ” μž‘μ—…λ“€μ€ μ–΄λ–»κ²Œ ν•΄μ„œλ“  DBMS의 νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ œμ™Έμ‹œν‚€λŠ” 것이 μ’‹λ‹€. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ 메일 μ„œλ²„μ™€ 톡신할 수 μ—†λŠ” 상황이 λ°œμƒν•œλ‹€λ©΄ μ›Ή μ„œλ²„λΏ μ•„λ‹ˆλΌ DBMS μ„œλ²„κΉŒμ§€ μœ„ν—˜ν•΄μ§„λ‹€.

  • 정보λ₯Ό μ €μž₯ν•˜λŠ” 5, 6번 μž‘μ—…μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ λ¬Άμ–΄μ•Ό ν•˜λ©°, 7번 μž‘μ—…μ€ μ €μž₯된 데이터λ₯Ό ν™•μΈν•˜λŠ” μž‘μ—…μ΄λ―€λ‘œ νŠΈλžœμž­μ…˜μ— 포함할 ν•„μš”λŠ” μ—†λ‹€. 9번 μž‘μ—…μ€ 성격이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 이전 νŠΈλžœμž­μ…˜(5, 6번)에 ν•¨κ»˜ λ¬Άμ§€ μ•Šμ•„λ„ 무방할 수 μžˆλ‹€.

λ¬Έμ œκ°€ 될 λ§Œν•œ 뢀뢄을 λ³΄μ™„ν•΄μ„œ λ‹€μ‹œ μ„€κ³„ν•΄λ³΄μž.

μ—¬κΈ°μ„œ μ„€λͺ…ν•˜λŠ” λ°”λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œκ°€ DB 컀λ„₯μ…˜μ„ κ°€μ§€λŠ” λ²”μœ„μ™€ νŠΈλžœμž­μ…˜μ΄ ν™œμ„±ν™”λΌ μžˆλŠ” ν”„λ‘œκ·Έλž¨μ˜ λ²”μœ„λ₯Ό μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀. ν”„λ‘œκ·Έλž¨ μ½”λ“œμ—μ„œ 적은 라인이라 ν•˜λ”λΌλ„ λ„€νŠΈμ›Œν¬ μž‘μ—…μ΄ μžˆλŠ” 경우 λ°˜λ“œμ‹œ νŠΈλžœμž­μ…˜μ—μ„œ λ°°μ œν•΄μ•Ό ν•œλ‹€.

Last updated