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
운영게시판
최근게시물
PostgreSQL Q&A 7568 게시물 읽기
No. 7568
테이블을 이용해서 큐 구현 시 문제
작성자
신기배(소타)
작성일
2008-12-08 23:39
조회수
6,647

안녕하세요~

 

DB 테이블을 이용해서 큐를 구현하고 있습니다.

Table "crawl.p3_analyze_request"

Column | Type | Modifiers

----------------+-----------------------------+-------------------------------------------------------------------

arid | bigint | not null default nextval('p3_analyze_request_arid_seq'::regclass)

bid | bigint |

link | text |

type | character varying(20) | not null

follow_content | boolean | not null default false

xpath | boolean | not null default false

entry_time | timestamp(0) with time zone | not null default now()

status | crawl_status | not null default 'none'::crawl_status

pick_time | timestamp(0) with time zone |

property | text |

error | text |

Indexes:

"p3_analyze_request_pkey" PRIMARY KEY, btree (arid)

"p3_analyze_request_idx" btree (entry_time) WHERE status <> 'finish'::crawl_status

Triggers:

p3_analyze_request_tr AFTER INSERT ON p3_analyze_request FOR EACH ROW EXECUTE PROCEDURE func_p3_analyze_request_tr_insert()

p3_analyze_request_tr1 AFTER UPDATE ON p3_analyze_request FOR EACH ROW EXECUTE PROCEDURE func_p3_analyze_request_tr_update()

 

이고요. queue 를 pop() 하는 부분입니다. 함수로 되어 있는데 핵심 부분만 올립니다.

 

update crawl.p3_analyze_request set status='open'::crawl_status, pick_time=now() where arid=(select arid from crawl.p3_analyze_request where status='none'::crawl_status and entry_time > now()-('2 day'::interval) order by arid limit 1) returning *

 

update 하면서 동시에 그 row를 리턴하게 했는데요.

이 쿼리가 동시에 다른 프로세스에서 들어가면 여러 놈이 이 값을 가져갑니다. 이 부분에 MVCC가 해당되지 않는건가요? =_=

이 문제를 해결하려면 row level lock 으로는 안되고 테이블 락이 걸려야만 하는건가요 ㅠ

 

답변 부탁드립니다~

이 글에 대한 댓글이 총 3건 있습니다.

일단 함수내에서 저 update ... returning * 쿼리 위에서

 

lock table crawl.p3_analyze_request;

 

를 해줘서 무결성을 유지했는데요.. 좀 더 세련된 방법이 없을까요~

신기배(소타)님이 2008-12-09 00:14에 작성한 댓글입니다.

lock 뿐 일 듯

김상기(ioseph)님이 2008-12-09 13:34에 작성한 댓글입니다.

lock 말고는 대안이 없을듯 싶네요

tyro님이 2008-12-10 13:54에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7578하루에 한번씩 테이블을 생성하려고합니다. [3]
김종석
2008-12-19
6280
7576CREATE TABLE 때 DATE Format 처리 방법을 알려 주세요 [4]
박춘삼
2008-12-18
6804
7572윈도우용 PostgreSQL에서... [2]
이기자
2008-12-13
6750
7568테이블을 이용해서 큐 구현 시 문제 [3]
신기배
2008-12-08
6647
7567[문의] could not access status of transaction [1]
Disremember
2008-12-01
7820
7566template DB를 사용하여 새로운 DB 생성
2008-11-26
6233
7565Primary Keys 의 인덱스 사용 [1]
지우개
2008-11-24
6653
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다