database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4453 게시물 읽기
No. 4453
트랜잭션과 락킹
작성자
박종태(rasungboy)
작성일
2008-09-24 17:00
조회수
4,787

안녕하세요.


예를들어 좌석예매라던지 수강신청이라던지 정원이 정해져있을대


수백명의 요청이 정원에 맞게 처리되기 위해서는 어떤식으로


처리해야 되는지 궁금합니다.


예를들어 영화예매같은경우 3자리가 남았습니다.


그리고 10명이 동시에 예매를 신청합니다.


어느자리를 예매할지는 정하지 않는다고 칩니다.


10명은 select * from 예매정보 를 수행해서 자리가 남았는지 검사합니다.


10명이 동시에 했다고 치고 3자리가 남은걸 10명모두 확인했습니다.


조회결과 자리가 남았으므로 예매를 할수 있겠고 결과적으로 10명모두


데이타를 넣을수 있는 조건(3자리가남았으므로)을 충족해서


10개의 예매정보가 들어갑니다. 그러나 7개는 오버플로우 된것이죠.


이런경우를 위해 테이블에 락을 건다고 알고 있습니다.


근데 락을 건다고하더라도 문제가 있을것 같습니다.


아래와같은 시나리오입니다.


한명이 예매정보 테이블에 락을 겁니다. 그리고 자리가 남았는지


조회합니다. 그와 동시에 다른사람들은 자리가 남았는지 검사하는


부분에서 해당테이블을 접근하다가 락에의해 대기합니다.


그리고 락을 건 사람은 예매정보를 입력하고 락을 해제합니다.


이때 자리가 남았나 검사하는 부분에서 대기중이던 다른 사람들은


동시에 테이블에 접근할수 있겠고 결과적으로 2자리가 남은걸 확인하고 모든


사람들이 동시에 데이타를 인서트 합니다. 결국 맨처음과 같은 경우가


발생하는 것이죠.


이런경우는 트랜잭션으로도 어떻게 해볼수 없는것 같은데


보통 어떤방법을 쓰는지 궁금합니다

[Top]
No.
제목
작성자
작성일
조회
4460다른 서버(MS SQL) DB 로 특정 테이블의 데이터를 매일 이전하는 방법을 알려주세요....
김세윤
2008-09-25
5112
4458커서를 이용하여 동적으로 컬럼 생성하기 [1]
최보현
2008-09-24
5627
4456'Database 실행 오류' 메세지 문제...
2008-09-24
4767
4453트랜잭션과 락킹
박종태
2008-09-24
4787
4452용량이부족해서
호기심
2008-09-24
4906
4451MSSQL에서 mdf를 받았는데 백업파일이 너무 크네요? [1]
초보자
2008-09-23
5467
4450select into를 어떻게 구현해야 좋을지... [1]
초보자
2008-09-22
5019
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다