포럼

쉽게 설명을 해보도록 할게요.


innodb 와 myisam 은 뭐 트랜잭션을 지원한다던가 다양한 차이점이 있지만,

웹사이트 성능에 가장 큰 영향을 미치는건, locking 방식의 차이라고 할수있습니다.


locking 방식은

innodb 는 row 단위로,

myisam 은 table 단위로 처리하게 되지요.


아 이게 무슨소린지 잘 모르셔도 일단 저 두가지를 이해하고 다음으로 넘어가 주시길 바랍니다.


일단 먼저 왜 데이터베이스가 lock 이라는것을 수행하는지 이해하셔야 합니다.


예를들어서 A 에 10이라는 정보가 들어가있다고 합시다.

우리는 A 에 들어가있는 숫자를 연산을 통해서 2배로 만드는 프로그램을 가지고 있습니다.

근데 그 프로그램 연산하는데에는 무려 20초가 걸린다고 가정해봅시다.


그러면, 

요구 -> A 가져옴 -> 20초 동안 처리 -> 원래값의 2배인 20을 A 에 넣음

의 순서를 가지게 됩니다.

근데 웹서비스(데이터베이스)는 같은 시간에 다양한 요구가 오는 상태가 매우 잦지요.


요구 A 도 A 를 2배로 만들고

요구 B 도 A 를 2배로 만든다고 해봅시다.


요구 A --> A 가져옴 --> 처          리        중 --------------------> 2배인 20을 넣음

이라고 할때

      요구B -----> A 가져옴 --> 처    중 ----------------------------> ??


맨 마지막의 ?? 의 결과값은 몇이 될까요?

원래라면 두번 처리되었으므로, 40이 들어가야 맞지만,

요구 B 가 A 를 가져오는순간에는 여전히 10이므로,

최종값은 20이 됩니다.


이렇게 되면, 난리가 벌어지겠지요?

은행에서 계좌이체를 연타하면 계좌 돈은 한번만 빠져나갔는데 입금은 여러번 되는 돈복사 버그가 벌어질지도 모릅니다.


이러한 것을 막기 위해서 데이터베이스는 lock 이라는걸 지원합니다.

요구 A 가 모든 처리를 끝낼때까지 다른 사람은 A 를 건들지 못하게 하는거죠.


요구 A --> A 가져옴 --> 처          리        중 --------------------> 2배인 20을 넣음

      요구B -----> A 가져옴 --> 처    중 --------------------------> ??



요구 A --> A 가져옴 --> 처          리        중 ----------> 2배인 20을 넣음

      요구B -----> 대기  -----------------------------> A 가져옴 - > 처리 -> 2배인 40을 넣음


을 되게 만드는거지요.


자, 그럼 이게 어떠한 차이를 유발하느냐.

조금더 이야기를 해봅시다.


myisam 의 경우

table 단위로 이러한 lock 을 처리합니다.


xe_documents 라는 XE 문서 전체 테이블 단위로 lock 을 거는거죠.

A 라는 사람이 글을 수정하는 동안에는

B 는 글을 수정할수가 없습니다.

그것이 설사 다른 글이라고 해도 말이죠.


A 가 documents 테이블에서 행동을 하는동안은

documents 테이블에 관련된 모든 요구가 대기상태에 빠집니다.


!!!


innodb 의 경우는 DB 의 row 단위로 lock 을 처리합니다.

myisam 과는 다르게

글 번호 100번을 건들고 있다면

101번은 동시에 건들수 있는거죠.


오오! 동시 작업 능력이 훨씬 나아지고,

대기시간이 나아지는 좋은거군요!


라고 생각할수 있는데, 

이 방식도 단점이 존재합니다.


lock 을 처리해야할 양이 많아져서

그러한 처리양이 부담이 되는거지요.


테이블 단위라면 테이블 30개 정도의 lock 만 관리하면되는데

리플이 300만개라면 300만개의 lock 를 관리해야겠지요


다만 그러한 관리의 부담을 고려하고서라도,

테이블 단위의 락은 테이블에 데이터가 많이 들어가고, 그 데이터에 많은 사람이 접근하는경우는 지연 시간이 기하급수적으로 늘어납니다.


그러한 의미에서 대규모 접속이 많은 사이트의 경우는 innodb 를 추천하는거지요


'-^

글쓴이 제목 최종 글
RGB255 xe 정말 어렵네요 [10] 2020.03.14 by rjfnaksnx
도라미 php4 지원에 대해서 어떻게 생각하시나요? [10] 2020.03.14 by rjfnaksnx
StyleRoot 통합검색 확장모듈... 이번에는 리얼 실시간 검색어 순위 위젯! [37] file 2014.07.29 by rjfnaksnx
mAKEkr XE 사용자 포럼(XEUF)에 대한 참여자 혹은 자유로운 의견을 받습니다. [31] 2014.07.29 by rjfnaksnx
GG 아이폰 유저에게 커뮤니티 사이트 새글 등록 알림은 어떤식으로? [14] 2014.07.28 by SeungXE
애니즌 에디터의 reloadFileList()에 관한 의문.. [1] 2014.07.28 by 애니즌
SeungXE 레벨에 따라 자동 그룹 변경시 쪽지를 보내주는 애드온 같은 것은 아직 개발된 전적이 없나요? [6] 2014.07.27 by SeungXE
mAKEkr XE 게시판모듈로 블로그처럼 사용하시는분들이 얼마나 되시는지 궁금합니다. [13] 2014.07.27 by SeungXE
공수래 jssor.slider 스크립트를 이용한 위젯 [1] file 2014.07.27 by 큰성565
SeungXE ajax를 사용해 플리커로 이미지를 보내게 처리중인데, 에디터 컴포넌트 method 로 할까요 아니면...  
KrteamENT 이런 알림센터는..어떨련지.. [8] 2014.07.26 by KrteamENT
콜라와사이다그리고 골때리는 신디케이션 [5] 2014.07.25 by CoffeeMix
XE XE 오픈 세미나 - XE 레이아웃 제작 실습 (2014년 7월 26일) file  
꿈틀잉 w3c 에러 검출부분이요...  
다크진 네이버 97% ㅜㅜ [4] file 2014.07.25 by 졸라맨
졸라맨 1.7.3에서 1.7.5업그레이드 성공! [4] 2014.07.25 by 졸라맨
HEJ 신디케이션 네이버웹마스터 [7] 2014.07.25 by 몽실아빠
SeungXE BBCode 애드온에 추가할 BBCode 건의받습니다  
가나라라라a 신디케이션 정확도에 노출 [2] 2014.07.25 by 달구뇽09772
훗훗.. 핑은 정상적으로 되는데 신디케이션 수신문서는 반영이 안돼요 [15] 2014.07.25 by 달구뇽09772