계층 구조를위한 Meteor 데이터베이스 설계

제시 앨 드리지

저는 Meteor와 Mongo를 처음 접했고 기본적인 데이터베이스 디자인 질문이 있습니다.

Advance Wars 와 같은 턴 기반 전략 게임을 만들고 있다고 가정 해 보겠습니다 . 데이터 구조화 방법을 잘 모르겠습니다.

내 HTML에서이 작업을 수행 한 작은 데모를 만들었습니다.

{{#each chars}}
  <div class='char' style={{get_style}}>
      ...
  </div>
{{/each}}

이 도우미는 Template.body에 정의되어 있습니다.

Template.body.helpers({
  chars: function() {
    return Characters.find({});
  },
  ...
})

한 번에 하나의 게임 만 실행할 때 제대로 작동합니다. 그러나 동시에 여러 게임을 실행하는 경우 어떻게 작동하는지 잘 모르겠습니다.

이를 수행하는 한 가지 방법은 게임 컬렉션을 보유하는 것입니다. 이러한 각 게임은 둘 이상의 플레이어를 참조하며 각 플레이어는 캐릭터 목록을 가질 수 있습니다. 각 캐릭터는 x 및 y 위치를 가질 수 있습니다. 하지만 어떤 쿼리로 바꿀지 모르겠습니다 Characters.find({}).

나는 그것이 같은 것일 수 있다고 생각한다 Game.findOne({game_id: game_id}).players[player_id].characters. 하지만 성능에 어떤 영향이 있는지 잘 모르겠습니다. Meteor는 캐릭터가 움직일 때마다 전체 게임 오브젝트를 끌어 내릴까요? 나는 Meteor가 내부에서 무엇을하고 있는지 정말로 이해하지 못합니다.

최소한의 변경이 필요한 또 다른 가능성은 Characters.find({game_id: 123, player_id: 1}). 그런 다음 모든 게임의 모든 캐릭터를 하나의 큰 컬렉션에 담았습니다. 게임에서 캐릭터를 "캡슐화"하지 않는 것이 조금 이상해 보이지만 아마도 이것이 갈 길이다.

사실, 지금까지 작성 했으므로 두 번째 옵션이 더 의미가있는 것 같습니다. 그리고 다른 모든 내부 게임 개체를 별도의 컬렉션으로 정의 할 것 같습니다. 이것에 대해 좋은 방법입니까?

리 샤트

컬렉션이 다음과 같은 항목을 저장한다고 가정 해 보겠습니다.

{
  _id: String,
  started: Date,
  players: [{
    _id: String,
    name: String,
    characters: [{
      _id: String,
      x: Number,
      y: Number
    }, {
      // ...
    }]
  }, {
    // ...
  }]
}

당신이있는 경우 _id게임의 그리고 당신은 모든 선수와 자신의 캐릭터를 얻을 필요가, 당신은 간단하게 할

let gameId = 'whatever';
const games = Games.find({
  _id: gameId
});

그 후에 games는 ID로 선택한 게임 (디자인에 따라 고유함) 인 단일 요소를 반복 할 수있는 커서가 있습니다.

그런 다음 템플릿에서

<div class="games">
  {{#each games}}
    <h1>{{started}} — game's `started` scalar property.</h1>
    {{#each players}}
      <div class="player" id="{{_id}}">
        <h2 id="{{_id}}">{{name}} — player's name</h2>
        {{#each characters}}
          <h3 id="{{_id}}">{{x}}, {{y}} — coordinates of a character</h3>
        {{/each}}
      </div>
    {{/each}}
  {{/each}}
</div>

_id현재 컨텍스트를 얼마나 존중 하는지 주목하십시오 .

동일한 작업을 수행하는 또 다른 방법은 커서 대신 일반 객체를 사용하는 것입니다.하지만 쿼리 결과가 단일 요소가되도록 보장하는 경우에만 사용해야합니다.

let gameId = 'whatever';
const game = Games.findOne({
  _id: gameId
});

템플릿은 약간 다르게 보일 것입니다. 하나의 일반 객체가 있으므로 반복 할 것이 없습니다. 따라서 최상위 컨텍스트를 생략하고 with블록으로 대체하는이 객체의 속성에 액세스 할 수 있습니다 .

<div class="game">
  {{#with game}}
    <h1>{{started}} — game's `started` scalar property.</h1>
    {{#each players}}
      <div class="player" id="{{_id}}">
        <h2 id="{{_id}}">{{name}} — player's name</h2>
        {{#each characters}}
          <h3 id="{{_id}}">{{x}}, {{y}} — coordinates of a character</h3>
        {{/each}}
      </div>
    {{/each}}
  {{/with}}
</div>

템플릿 (또는 전체 클라이언트)이 Games컬렉션을 구독 하고이 컬렉션이 서버에 게시되고 전체 필드 집합을 반환하고 데이터를 쿼리하지 않습니다 (또는 사용자가 제어하지만).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

계층 적 데이터를위한 관계형 데이터베이스 설계?

분류에서Dev

자체 참조를위한 데이터베이스 설계

분류에서Dev

데이터베이스 계층 구조-다른 노드 표현

분류에서Dev

조건부 질문을위한 데이터베이스 설계

분류에서Dev

계층 구조 데이터베이스 테이블에서 노드 이동

분류에서Dev

데이터베이스 설계를위한 최상의 방법

분류에서Dev

많은 사용자를위한 데이터베이스 설계

분류에서Dev

데이터베이스의 계층 적 데이터를 표시합니까?

분류에서Dev

데이터베이스 제출을위한 AngularJS 계층화 된 날짜 필터

분류에서Dev

자바 애플리케이션을위한 계층 구조 설계

분류에서Dev

계층 적 데이터 구조를 얻기 위해 mysql 얻기

분류에서Dev

응용 프로그램 계층에 TFS를 설치할 때 데이터 계층의 데이터베이스에 영향을 줍니까?

분류에서Dev

성취 시스템을위한 데이터베이스 설계

분류에서Dev

채팅 시스템을위한 데이터베이스 설계

분류에서Dev

일대일 관계를 설계하는 데이터베이스

분류에서Dev

주차장을위한 MySQL 데이터베이스 설계

분류에서Dev

인적 자원을위한 데이터베이스 설계

분류에서Dev

극장 직원을위한 데이터베이스 설계

분류에서Dev

단어 사전을위한 데이터베이스 설계

분류에서Dev

주석 시스템 구현을위한 데이터베이스 설계 방법

분류에서Dev

주석 시스템 구현을위한 데이터베이스 설계 방법

분류에서Dev

단일 클라이언트의 데이터를 별도의 데이터베이스로 이동하기위한 설계 조언 구하기

분류에서Dev

데이터 액세스 계층 [C #]에서 데이터베이스 매핑을위한 디자인 패턴

분류에서Dev

상점 당 여러 가격에 대한 데이터베이스 구조 설계

분류에서Dev

엔터프라이즈 하드웨어 재고 및 청구를위한 데이터베이스 설계

분류에서Dev

간단한 송금 및 정규화를위한 데이터베이스 설계

분류에서Dev

데이터베이스 설계에서 이진 관계 대 비 이진 구현

분류에서Dev

데이터베이스 설계 다 대다 및 소유 참조

분류에서Dev

데이터베이스 설계 / 관계

Related 관련 기사

  1. 1

    계층 적 데이터를위한 관계형 데이터베이스 설계?

  2. 2

    자체 참조를위한 데이터베이스 설계

  3. 3

    데이터베이스 계층 구조-다른 노드 표현

  4. 4

    조건부 질문을위한 데이터베이스 설계

  5. 5

    계층 구조 데이터베이스 테이블에서 노드 이동

  6. 6

    데이터베이스 설계를위한 최상의 방법

  7. 7

    많은 사용자를위한 데이터베이스 설계

  8. 8

    데이터베이스의 계층 적 데이터를 표시합니까?

  9. 9

    데이터베이스 제출을위한 AngularJS 계층화 된 날짜 필터

  10. 10

    자바 애플리케이션을위한 계층 구조 설계

  11. 11

    계층 적 데이터 구조를 얻기 위해 mysql 얻기

  12. 12

    응용 프로그램 계층에 TFS를 설치할 때 데이터 계층의 데이터베이스에 영향을 줍니까?

  13. 13

    성취 시스템을위한 데이터베이스 설계

  14. 14

    채팅 시스템을위한 데이터베이스 설계

  15. 15

    일대일 관계를 설계하는 데이터베이스

  16. 16

    주차장을위한 MySQL 데이터베이스 설계

  17. 17

    인적 자원을위한 데이터베이스 설계

  18. 18

    극장 직원을위한 데이터베이스 설계

  19. 19

    단어 사전을위한 데이터베이스 설계

  20. 20

    주석 시스템 구현을위한 데이터베이스 설계 방법

  21. 21

    주석 시스템 구현을위한 데이터베이스 설계 방법

  22. 22

    단일 클라이언트의 데이터를 별도의 데이터베이스로 이동하기위한 설계 조언 구하기

  23. 23

    데이터 액세스 계층 [C #]에서 데이터베이스 매핑을위한 디자인 패턴

  24. 24

    상점 당 여러 가격에 대한 데이터베이스 구조 설계

  25. 25

    엔터프라이즈 하드웨어 재고 및 청구를위한 데이터베이스 설계

  26. 26

    간단한 송금 및 정규화를위한 데이터베이스 설계

  27. 27

    데이터베이스 설계에서 이진 관계 대 비 이진 구현

  28. 28

    데이터베이스 설계 다 대다 및 소유 참조

  29. 29

    데이터베이스 설계 / 관계

뜨겁다태그

보관