2012-11-11 2 views
0

이 질문은 Travian이나 Tiberium 전쟁과 같은 MMOG의 엄청난 세계지도를 고려해보십시오. 2D 맵이라 할지라도 플레이어의 마을, 지형 등 다른 정체성이 많습니다.데이터베이스에 위치 격자를 저장

이러한 맵은 데이터베이스에 어떻게 저장됩니까? 그 위치에있는 신분에 외래 키가있는 모든 타일에 대한 항목이 있습니까? 또는 그 반대의 경우 : 위치를 정의하는 두 개의 위치 속성 (x, y)으로 각 신원을?

더 넓은 의미에서, 제 질문은 다음과 같습니다 : mysql과 같은 데이터베이스에 위치 격자 (정사각형 타일, 육각형 타일 등)를 저장하는 가장 효율적인 방법은 무엇입니까? DB에 위치 나 위치 목록을 쿼리 할 때 이러한 저장소를 만드는 데 병목 현상이있는 경우 (있는 경우)?

답변

0

이것은 전적으로 시나리오에 따라 다릅니다. 예를 들어지도가 희소 한 경우 좌표가있는 항목의 위치를 ​​단일 행에 저장하는 것이 좋습니다. 토폴로지가 불규칙한 경우 (즉, 주어진 타일에서 임의의 경로가 여러 개있는 경우),이를 그래프로 저장할 수 있습니다 (예 : 일대 다 구성에서 "노드"및 "에지"테이블 분리) . 데이터베이스의 항목에 대해 연속적인 (예 : 실제) 좌표를 사용하도록 결정한 다음 해당 항목을 응용 프로그램의 논리적 "타일"로 간단하게 분할 할 수 있습니다.

마찬가지로 병목 현상은 응용 프로그램에 따라 달라질 수 있습니다. 당신은 정기적으로 "내 주위에있는 것이 무엇입니까?"라고 물어보아야합니까, 아니면 단순히 "여기에서 저기로 갈 수 있습니까?"라고 묻고 있습니까? 특정 유즈 케이스를 염두에 두었다면 세부 정보를 더 추가 할 수 있으며보다 자세한 답변을 제공 할 수 있습니다.

언제나처럼 성능에 대해 이야기 할 때, 가상의 경우 임의의 추측은 결코 프로토 타이핑 및 측정을 대신 할 수 없습니다.