• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

DB 쓰레드 질문입니다

22.03.07 04:45 작성 조회수 157

0

존 별로 병렬처리를 한다고 했을 때도

DB쓰레드를 만들어야 할까요?

병렬처리를 위함이라면 

각 존 쓰레드에서 db까지 처리해도 될거 같아서 질문드립니다.

 

답변 1

답변을 작성해보세요.

1

존 별로 병렬처리를 한다고 했을 때도
DB쓰레드를 만들어야 할까요?
병렬처리를 위함이라면 
각 존 쓰레드에서 db까지 처리해도 될거 같아서 질문드립니다.

-> Zone 쓰레드에서 DB 처리까지 바로 처리하지 않는 이유는,
DB 저장 명령어가 비동기 작업이 아니고 굉장히 오래 걸리는 작업이기 때문입니다.
특히 나중에 가서 데이터가 몇천만 단위가 되면, 저장 작업이 오래 걸릴 수 있습니다.
SaveChanges를 했을 때 비록 우리 눈엔 0.01초가 짧아 보일지 모르나
서버 입장에선 0001초가 아주 긴 시간이고, 이런 것들이 축적되면 게임 컨텐츠 진행에
렉을 유발하기 때문에 분리하는 것입니다.

두번째로 이건 기획에 따라 다르지만,
DB 처리를 병렬로 처리하면 골치 아파지는 문제가 하나 더 있는데요.

가령 DB 처리가 순차적으로 이루어져야 하는 경우가 있습니다.
ex) Player1의 골드가 100으로 바뀌고, 그 다음 50으로 바뀌고, 그 다음 0으로 바뀌어야 하는데.
이 3가지 요청을 어쩌다 병렬로 처리했더니만, 50, 0, 100 순서로 처리되어 최종 골드가 100이 된다면?

답변 감사드립니다!!

그럼 db잡이 계속 쌓이지만 않게되면 (약1초 2초 지연후 서서히 모두 처리됨) 하나의 쓰레드로 처리 가능한 것입니까?

인디 게임 수준이라면 DB 쓰레드 1개로 가는 것이 정신건강에 좋습니다.
그러나 실제 큰 회사에서 만드는 MMO에선, 어찌됐건 DB Connection 쓰레드를 4~5개 두고
다만 위에서 얘기한대로 순서가 중요한 애들은 순서에 맞게 처리되도록
이런 저런 코드들을 추가로 넣어줘야 합니다.

답변 정말 감사합니다!!