문제

웹 애플리케이션의 데이터베이스 설계에 대한 팁/조언이 있는 사람이 있습니까?미래에 내가 작업 중인 응용 프로그램이 출시되어 사용량이 많아지기 시작할 때 많은 시간/노력을 절약할 수 있는 종류의 것입니다.

좀 더 구체적으로 말하자면, 애플리케이션은 대부분 플레이어가 데이터베이스에 저장되고 나중에 처리되며 결과도 데이터베이스에 저장되는 "주문"을 내리는 전략 게임(브라우저 기반, 텍스트만)입니다. "주문"에 대한 결과가 상당히 커질 것입니다.)

자세한 내용을 추가하도록 편집되었습니다. (요청대로):

플랫폼:장고

데이터베이스 엔진:나는 MySQL을 사용하려고 생각하고 있었습니다(다른 것을 사용하는 데 큰 이점이 없는 한)

스키마:지금 내가 가지고 있는 것은 Django 모델 몇 개뿐입니다. 여기에 게시하기에는 너무 자세한 내용입니다.그리고 스키마 게시를 시작하면 이는 너무 구체적이 되어 일반적인 팁을 찾고 있었습니다.예를 들어, 나중에 처리될 "주문"을 발행하고 일종의 "역사"를 표시하기 위해 저장해야 하는 결과를 반환한다고 가정해 보겠습니다.이 경우 "기록"에 대한 별도의 테이블을 갖는 것이 더 낫습니까, 아니면 "주문"과 결과를 모두 집계하는 테이블만 갖는 것이 더 낫습니까?"기록" 테이블을 캐시할 수 있을 것 같지만 집계 테이블에서 행을 변경하는 대신 지속적으로 새 행을 생성해야 하기 때문에 데이터베이스에서 더 많은 공간과 더 많은 데이터베이스 작업이 필요합니다.

도움이 되었습니까?

해결책

당신은 일반적으로 높은 확장성과 성능을 위한 설계라는 훨씬 더 큰 문제를 다루었을 것입니다.

기본적으로 데이터베이스 설계를 위해 자주 사용할 것으로 예상되는 데이터에 외래 키와 인덱스를 추가하고, 데이터를 더 작은 테이블로 분할하여 정규화하고, 자주 읽을 데이터와 읽을 데이터를 식별하는 등의 모범 사례를 따릅니다. 자주 작성하고 최적화하세요.

고성능 웹 애플리케이션을 위한 데이터베이스 설계보다 훨씬 더 중요한 것은 HTML 페이지 캐싱을 통한 클라이언트 수준과 캐시된 데이터를 통한 서버 수준 또는 동적 파일 대신 정적 파일 제공을 통해 캐싱을 효과적으로 사용하는 것입니다.

캐싱의 가장 큰 장점은 필요에 따라 추가할 수 있으므로 애플리케이션이 시작될 때 그에 따라 발전할 수 있다는 것입니다.

기록 데이터에 관한 한 이는 자주 변경될 것으로 예상하지 않으므로 캐시하는 것이 좋습니다.데이터에서 정기적이고 상당히 집중적인 보고서를 생성하려면 웹 응용 프로그램이 실행되는 동안 중단되지 않도록 이 데이터를 다른 데이터베이스에 저장하는 것이 좋습니다.

물론 이러한 종류의 최적화는 애플리케이션이 이를 보장한다고 생각하지 않는 한 실제로 필요하지 않습니다.

다른 팁

데이터베이스 정규화, 그리고 인덱스에 대해 좋은 생각을 하는 것은 놓칠 수 없는 두 가지 사항입니다.특히 SELECTS가 UPDATE보다 훨씬 더 자주 발생하는 게임을 고려한다면 더욱 그렇습니다.

장기적으로는 다음 사항도 살펴봐야 합니다. 멤캐시드, 사용자가 여러 명일 때마다 데이터베이스 쿼리로 인해 병목 현상이 발생할 수 있습니다.

지금 가지고 있는 스키마를 게시해 보는 것은 어떨까요?사용할 플랫폼과 데이터베이스, 제안하는 테이블 구조에 대한 세부 정보 없이 유용하게 대답하기에는 너무 광범위한 질문입니다.

당신은해야 비정규화하다 자주 조회되는 보고 유형 웹 페이지에 대한 데이터를 검색하기 위해 하나의 쿼리로 6개 이상의 테이블을 조인하는 경우 테이블을 사용하세요.또한 Hibernate 또는 ActiveRecord와 같은 ORM 라이브러리를 사용하는 경우 생성되는 기본 매핑과 생성되는 SQL에 약간의 시간을 투자해야 합니다.데이터베이스에 대한 한 번의 왕복으로 동일한 결과를 얻을 수 있었음에도 불구하고 그들은 데이터베이스에 대해 매우 수다스러운 경향이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top