Ask Your Question
0

게임 오브젝트 에서 중복 key 가 가능한가요?(2016-08-02, steve.lee)

asked 2016-11-30 17:57:11 +0900

inkeun.kim gravatar image

안녕하세요..

"User": { 
"Id": "String KEY", 
"Type": "String KEY", 
"MyCharacter": "Character" 
},

생성을 할 때는 두개의 키 값을 입력을 해서 하는데 Fetch 할 때는 따로 하는 것도 있고 같이 하는 것이 없어요? FetchByIdType 가 없어요.

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2016-11-30 17:57:50 +0900

inkeun.kim gravatar image

Answer by DK.Moon · 2016-08-03 AM 03:17

안녕하세요.

질문하신 내용은 key 로 2개를 지정했으니 그 둘이 복합키 (composite key) 로 동작할 수 있는 FetchByKey1Key2 같은 함수가 생성되어야될 것 같은데 왜 생성이 안되는지에 대한 질문이신 것 같습니다.

약간 오해의 소지가 있는데, 여기서 key 를 2개 이상 지정했을 때 생성되는 schema 는 (A, B) 에 의한 복합키가 아니라 A 라는 키와 B 라는 독립된 키 두 개를 생성하게 됩니다. 그 때문에 FetchByXXX 는 각 키별로 하나씩만 생성됩니다.

아마 Create 이 모든 키를 입력으로 받게끔 생성되기 때문에 오해를 드린 것 같습니다. 키 라는 속성상 null 은 될 수 없으니 A, B 가 각각의 독립된 키라고 하더라도 생성시에는 모두 지정해줘야되서 Create 이 모든 입력을 다 받고 있습니다.

만일 두개의 키를 모두 만족시키는 것을 query 하시는 경우라면 다음과 같이 하실 수 있습니다. 키가 A, B, C, ... 라고 가정하겠습니다.

void IntersectSelectResults(const Ptr<std::set<Id> > &select_result, const Ptr<std::set<Id> > &intersect_result, bool first) {
  if (first) {
     select_result->swap(*intersect_result);
   } else {
     std::set<Id> result;
     std::set_intersection(select_result->begin(), select_result->end(), intersect_result->begin(), intersect_result->end(), std::inserter(result, result.begin()));
     result.swap(*intersect_result);
 }
 Ptr<std::set<Id> > result(new std::set<Id>);
 User::SelectByA(Object::kEqualTo, "A값", boost::bind(IntersectSelectResults, result, true);
 User::SelectByB(Object::kEqualTo, "B값", boost::bind(IntersectSeelctResults, result, false);
 User::SelectByC(Object::kEqualTo, "C값", boost::bind(IntersectSeelctResults, result, false);
 ...

그런데 위의 방법은 DB 서버에서 게임 서버로 select 결과를 가져오고, 그 결과의 교집합을 구하는 방식인데, Select 결과가 많을 경우 부하가 클 수 있습니다. 대부분의 경우 게임 서버는 처리해야되는 계정이나 캐릭터를 명확히 알기 때문에 복잡한 key 로 query 를 하는 일은 드믈고, 이런 query 는 주로 운영툴에서 이루어지기 때문에 저희쪽에서는 복잡한 key 지원대신 최대한 인터페이스를 단순하게 한 싱글 키를 지원하고 있습니다. 그런데 복합키에 대해 질문하시는 분들이 있으셔서 저희쪽에서도 이에 대해서 추가를 고려하고 있으나 이른 시간 내에 추가되기는 어려울 듯 하니 번거로우시더라도 위의 가이드대로 처리해주시면 대단히 감사하겠습니다. 그리고 저희쪽에서도 개발자들의 사용 케이스를 파악하게 되면 개발 우선 순위를 높일 수도 있으니, 혹시 운영툴이 아닌 게임 내에서 처리해야되는 경우가 있으신 경우라면 댓글로 시나리오를 적어주시면 많은 도움이 될 것 같습니다.

감사합니다.

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: 2016-11-30 17:57:11 +0900

Seen: 38 times

Last updated: Nov 30 '16