장르가 많기 때문에 귀하의 질문은 실제로 광범위하지만 전문 소프트웨어 개발자의 관점은 다음과 같습니다.
사용하는 데이터 지속성 메커니즘을 결정하는 데 사용할 기준 목록을 제공했습니다. 그것들은 :
- 프로젝트의 크기
- 게임이 목표로하는 플랫폼.
- 데이터 구조의 복잡성
- 많은 프로젝트에서 데이터의 이식성.
- 데이터에 얼마나 자주 액세스해야합니까
- 동일한 응용 프로그램에 대한 여러 유형의 데이터
- 무엇을 사용할지 결정할 때 관심이 있다고 생각되는 다른 점이 있습니다.
먼저 사용할 수있는 옵션을 설정해야합니다. 언어 나 기술을 지정하지 않았으므로 정확히 말하기는 어렵지만 XML 과 관계형 데이터베이스 저장소 중에서 결정하려고합니다 .
중요한 차이점은 XML 은 실제로 직렬화 기술만큼 스토리지 메커니즘 이 아니라는 것 입니다. 게임의 메모리 내 구조를 나타내는 방법입니다. 따라서 플랫 파일 과 관계형 데이터베이스 스토리지에 대해 이야기하고 있습니다. 이것 만이 유일한 옵션은 아니지만 가장 일반적이므로 사용하겠습니다.
플랫 파일의 경우 :
- XML
- JSON
- YAML
- XAML
- 일반 텍스트
데이터베이스의 경우 :
편집 : 파일 및 관계형 데이터베이스 외에도 다른 유형의 메커니즘에 대해 질문했습니다. 내가 정기적으로 사용하는 다른 주목할만한 유형의 데이터베이스는 기본적으로 키-값 기반 인 "버클리 스타일"데이터베이스입니다. 이들은 B- 트리를 사용하여 데이터를 구성하는 경향이 있으므로 조회 속도가 빠릅니다. 원하는 것을 정확히 알고있는 구성 / 설정 조회에 유용합니다 (예 : "Level 1"에 대한 모든 원격 측정 데이터 제공).
이제 모든 기본 사항을 벗어 났으므로 몇 가지 기준을 살펴 보겠습니다.
프로젝트의 크기
일부는 동의하지 않을 수 있지만 프로젝트 크기가 데이터 지속성 메커니즘에 큰 영향을 미치지는 않습니다. 원하는 메커니즘에서 데이터를 저장 /로드하는 재사용 가능한 함수 라이브러리를 구축하려고합니다. 필요한 경우 지속성 메커니즘을 쉽게 변경할 수 있도록 추상화 계층을 구현하는 것이 좋습니다 ( 어댑터 패턴 확인 ).
소규모 프로젝트의 경우 파일 시스템에서 XML을 사용하면 제대로 작동 할 수 있지만 플레이어가 마음대로 데이터를 변경할 수 없도록 일부 보안 문제 (예 : 암호화)를 해결하려고합니다.
게임이 목표로하는 플랫폼.
플랫폼도 큰 문제가되지 않습니다. 대상 플랫폼보다 개발 플랫폼에 더 관심을 가져야합니다. 그 이유는 일부 언어는 특정 유형의 마크 업 또는 데이터베이스를 다른 유형보다 즉시 처리하기 때문입니다. 위의 내용을 거의 모든 언어로 사용할 수는 없지만 지원되는 도구를 사용하는 것이 가장 좋습니다. 모든 플랫폼은 플랫 파일을 지원하고 XML을 구문 분석하지만, 모바일 플랫폼에서는 가능하면 이진 직렬화를 고려하거나 최소한 XML을 저장하도록 최적화해야합니다.
데이터 구조의 복잡성
이것은 까다로운 것입니다. 관계형 데이터베이스는 엔티티와 그 관계를 저장하는 데 유용합니다. 파일 시스템의 파일을 사용하는 것보다 관계형 저장소를 사용하여 구조를 강화하는 것이 더 좋습니다. 엔터티 간의 관계 유형과 엔터티를 변경하거나 관련 엔터티를 찾는 빈도를 고려하십시오. 매우 복잡한 구조의 경우 데이터베이스 경로를 사용하는 것이 좋습니다.
많은 프로젝트에서 데이터의 이식성.
이식성과 관련하여 데이터베이스는 파일보다 자연스럽게 더 무겁다는 사실을 고려해야합니다. 설치 및 구성 오버 헤드가 있으며 플랫폼마다 다른 데이터베이스를 사용할 수 있습니다. SQLite는이 문제를 해결하는 좋은 방법입니다. 그러나 이식성과 관련하여 XML과 같은 파일 기반 솔루션을 사용하면 더 쉽게 시간을 보낼 수 있습니다.
편집 : 귀하의 의견 중 하나에 이식성에 대해 언급 한 다른 우려 사항이 있습니다. 궁극적으로 데이터 나 제품 또는 파일 형식에 너무 밀접하게 연결되는 것을 원하지 않습니다. 컴파일하거나로드 할 때 데이터베이스 / 파일 시스템에서 쉽게 구문 분석하고 저장할 수있는 일종의 추상 형식 (탭으로 구분 된 파일, XML 등)으로 주식 데이터 (레벨, 적 등)를 저장할 수있는 것이 가장 좋습니다. 시각. 즉, 저장 메커니즘을 변덕스럽게 바꾸고 구문 분석 부분을 다시 작성할 수 있습니다.
데이터에 얼마나 자주 액세스해야합니까
많은 데이터 액세스는 일종의 캐싱 메커니즘이없는 한 많은 I / O를 의미합니다. 데이터베이스는 구조를 메모리에 유지하며 데이터 조작 및 검색에 좋습니다. 실제로 지속적으로 데이터를 유지하는 경우 데이터베이스를 사용하는 것이 좋습니다.
동일한 응용 프로그램에 대한 여러 유형의 데이터
볼륨은 반드시 고려해야 할 사항이지만 수천 또는 수백만 개의 객체를 유지하는 것에 대해 이야기하지 않는 한 파일 시스템은 여전히 솔루션으로 받아 들일 수 있습니다.
게임 타입
구축하는 게임 유형은 선택한 플랫폼에 큰 영향을 줄 수 있습니다. 예, 대부분의 클라이언트 전용 싱글 플레이어 게임의 경우 압축 또는 암호화 된 파일 시스템 기반 솔루션을 사용하는 것이 좋습니다. 그러나 온라인 구성 요소가있는 게임에 대해 이야기한다면 미친 것입니다. 데이터베이스 경로로 가서 두통을 피하십시오. 서버가 백엔드 클러스터를 사용하여 모든 데이터를 관리하도록합니다.
이 피드백이 도움이 되길 바랍니다. 그것은 완전히 포괄적 인 것은 아니며, 결정을 내리는 것은 궁극적으로 당신에게 달려 있지만, 나의 논평은 당신에게 생각할 것들을 줄 것입니다.
편집 : hybdrid 접근 방식이 많은 의미가있는 경우가 있습니다. 예를 들어 MMORPG를 개발 중이라고 가정 해 봅시다. 클라이언트 쪽에서는 위에서 언급 한 것처럼 다른 플레이어에 대한 캐시 된 데이터를 비 관계형 데이터베이스에 저장할 수 있습니다. 서버 측에서는 모든 게임 데이터를 관계형 데이터베이스에 저장하여 보관합니다. 그리고 다시 클라이언트 쪽에서는 로그 데이터, 구성 데이터 등을 XML / 플랫 파일에 저장하여 쉽게 액세스 할 수 있습니다.
또 다른 포스터는 데이터베이스에 프로덕션을 위해 데이터를 저장하더라도 개발에 플랫 파일을 대신 사용할 수있는 방법을 사용하는 것이 좋지만 때로는 믹스에서 다른 제품을 쉽게 제거 할 수 있다고 언급했습니다. .