저는 Google App Engine 및 Objectify 3.1을 사용하고 천천히 비정규 화에 대해 배우고 그 사용법에 따라 엔티티를 디자인하지만 아직 일부 문제로 어려움을 겪고 있습니다.Objectify/GAE - 구체적인 비정규 화 문제
:.나는 현재 사용자 엔티티는 게임 엔티티에 참여하고 두 가지 기본 솔루션있어, 사용자가에서 내가 볼때 참여하는 모든 게임을 찾을 수 있어야합니다 수있는 시스템을 구축하고있어
해결 방법 1)
스토어 게임에 대한 사용자 키 (participantKeys)의 목록과 게임을 찾을 수는 회원이 같이 참여 :
List<Key<User>> userList = new ArrayList<Key<User>>();
userList.add(new Key<User>(User.class, myUserId));
Collection<Game> games = ofy().query(Game.class).filter("participantKeys in" , userList).list();
솔루션 2) 게임 엔티티에 참가자 목록을 저장하는 것 외에도
는 또한 사용자가 사용자 개체에 참여한 게임의 목록을 저장하고이 같은 게임을 찾을 :
User myUser = userDao.getUser(myUserId);
Collection<Game> games = user.getParticipatedGameKeys();
솔루션 (1) 시스템에 많은 게임이 있으면 꽤 느려질 것입니다.
해결 방법 2를 사용하면 게임을 더 빠르게 찾을 수 있지만 사용자가 게임에 참여하고 퇴장 할 때마다 목록을 계속 업데이트해야합니다.
사용자가 오랫동안 시스템을 사용하면 게임 목록도 커집니다. 사용자가 현재 참여하고있는 모든 게임 만 반환하기 때문에 목록을 탐색하고 '역사적'게임을 제외해야합니다.
더 멋진 해결책이 누락 되었습니까? 위의 어느 쪽도 매우 매력적인 것처럼 보이지 않습니다.
모든 도움을 주시면 대단히 감사하겠습니다.
편집 :
내가 Mikl 뭔가를 시도하기로 결정은 .. 오랫동안 대안에 대해 생각 후에 제안 그래서
:-) 그것 같이 매우 거의 정확히 솔루션을 듣고 좋은나는 GameParticipation 엔티티를 만들었는데,이 엔티티에는 게임에 대한 링크, 사용자에 대한 링크 및 얻을 수 있어야하는 모든 기타 정보가 포함되어 있습니다.
게임이 결합 될 때마다 GameParticipation 엔티티를 업데이트하여 게임의 현재 상태를 반영합니다. 게임이 끝나면 엔티티가 삭제됩니다. 또한 게임이 변경되면 관련된 모든 GameParticipation 엔티티를 업데이트합니다.
성능 테스트를 조금 해봤지만 제대로 작동하는 것 같습니다!
의견을 보내 주셔서 감사합니다. Mikl - 좋은 아이디어! – Javasmurf