Ask Your Question
0

ORM DB 처리시 트랜잭션 관련해서 문의드립니다.

asked 2019-06-24 17:01:41 +0900

simpler gravatar image

ORM DB 처리시 트랜잭션 관련해서 문의드립니다. 메시지(패킷) 수신 함수에서 여러 db 처리 함수 사용할 경우, create or fetch or Reresh 를 묶에서 하나의 트랜잭션으로 처리하는게 맞는건가요? 트랜잭션을 재시작 하는 경우는 새로운 쓰레드에 의해 이벤트가 다시 시작 하는것으로 보아도 되는건지요?
만약 그렇다면 플레이어의 여러 정보들이 각기 다른 테이블로 저장 되어 있는 경우 여러 정보를 fetch 해야 한다면 촤악의 경우 한 트랜잭션에서 롤백이 빈번하게 발생할것으로 보이는데요. ( block이 되는경우에 ), 만약 롤백을 피해 이벤트를 쪼개는 경우(각기 다른 트랜잭션으로 처리되는것으로 이해함.),
이벤트 처리 수가 많아지고 , 요청한 각기 정보들이 전부 수집 되는데 (db 완료 처리, 여기에서 롤백이 발생할수 있을것으로 보임) 시간이 일정하지 않을것으로 보입니다. 제가 제대로 이해한것이 맞는지 문의 드립니다.

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2019-06-24 17:25:53 +0900

Seunghyun gravatar image

updated 2019-06-24 17:26:34 +0900

안녕하세요. 아이펀팩토리입니다.

하나의 이벤트 함수에서 Create, Fetch, Refresh 및 ORM Object 의 값 수정은 하나의 트랜잭션으로 처리됩니다. (엔진의 논리적인 트랜잭션이며 DB 의 트랜잭션은 아닙니다.) 이벤트 함수는 롤백에 의해 다시 시작될 수 있고 이 때 이벤트 스레드 중 하나가 할당됩니다.

롤백을 피하기 위해 이벤트를 쪼갤 경우 이벤트 수가 그만큼 늘어나게 되는 것은 맞습니다. 하지만 오브젝트를 DB 나 다른 서버로부터 읽어들이는 시간에는 영향을 주지 않습니다. 오브젝트의 Create(Key 를 갖는 오브젝트에만 해당), Fetch, Refresh 등은 이벤트 함수 최상단에서 불려야 가장 좋은 성능을 보이며, 롤백 시 성능 손실이 적습니다. 구현 과정에 불가피하게 이벤트 함수가 한참 실행된 이후에 이러한 처리가 필요할 경우 이벤트를 쪼개서 롤백에 의한 부하를 줄이거나, 아주 많은 오브젝트를 접근할 경우 잠금 시간이 길어지지 않도록 이벤트를 쪼개 성능 향상을 기대할 수 있습니다.

아래 링크의 이벤트 프로파일링 기능을 이용하시면 궁금증을 해소하시는데 도음이 될 수도 있을 듯 합니다. https://www.ifunfactory.com/engine/do...

감사합니다.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-06-24 17:01:41 +0900

Seen: 23 times

Last updated: Jun 24