문제

웹 투표 시스템과 관련된 프로젝트가 있습니다. 현재 값 및 관련 데이터는 여러 테이블에 저장됩니다. 과거 데이터는이 프로젝트의 중요한 측면이 될 것이므로 현재 데이터가 정기적으로 이동할 감사 테이블도 만들었습니다.

이 전략이 매우 비효율적입니다. 매일 데이터 만 보관하더라도 1 명 또는 2 명의 사용자 만 주어진 날에 업데이트하더라도 행의 수는 커질 것입니다.

내가 생각할 수있는 다음 대안은 변경된 항목 만 저장하는 것입니다. 이것은 주어진 날의보기를 자동으로 만들기 위해 논리를 구축해야한다는 것을 의미합니다. 이것은 저장된 행이 적지 만 상당한 복잡성을 의미합니다.

나의 마지막 아이디어는 조금 덜 전통적입니다. 과거 데이터는보고 목적을위한 것이므로 웹 사용자가 빠른 액세스 할 필요가 없습니다. 내 DB에 역사적 데이터가 없을 수 있다고 생각합니다. DB는 현재 상태만을 나타냅니다. 그런 다음 매일 전체 DB를 객체에로드 한 다음 (사용자/데이터 수는 비교적 낮습니다) XML 또는 JSON과 같은 것으로 직렬화됩니다. 이 파일은 전날과 차별화되어 저장 될 수 있습니다. 사실, SVN은 나를 위해 이것을 할 수 있습니다. 주어진 지난 날의 데이터를 원할 때 시스템은 그 날의 버전을 검색하고 객체로 삼아야합니다. 이것은 분명히 비용이 많이 드는 운영이지만 성능은 여기서 큰 관심사가 아닙니다. 나는 이것을 단순화 할 것이라고 생각하는 linq를 사용하는 것을 고려하고 있습니다. 직렬화 절차는 차이가 잘 작동하기 위해서는 꽤 구성되어야합니다.

어떤 접근 방식을 취 하시겠습니까?

감사

도움이 되었습니까?

해결책

시스템에 대해 우리에게 말한 것은 투표가 포함된다는 것입니다. 투표가 캐스팅되었을 때 타임 스탬프를 저장하는 한 언제든지 투표 상태 집계를 설명하는 보고서를 생성 할 수 있어야합니다.

예를 들어, 내가 좋아하는 기능 (눈, 미소, 엉덩이, ...)을 키우는 시스템이 있다고 가정합니다. 특정 날짜 기준 특정 기능에 대해 얼마나 많은 투표가 있는지 알고 싶다면 타임 스탬프가 해당 날짜와 같은 타임 스탬프의 모든 투표를 단순히 집계 할 것입니다.

다른 것들의 역사를 원한다면 비슷한 접근법을 따를 것입니다.

나는 이것이 완료된 방식이라고 생각합니다.

alt text

다른 팁

기본적으로 데이터 수정이 관계형 데이터베이스에 어떻게 저장되는지 궁금하다면 Wikis가 어떻게 수행하는지 살펴볼 것입니다.

Wikis는 모두 상세한 개정 기록을 유지하는 것입니다. 그들은 스토리지에 간단한 관계형 데이터베이스를 사용합니다.

Wikipedia의 데이터베이스를 고려하십시오 개요.

자리에 데이터베이스를 신발하려고하지 않고 실제 버전 제어 시스템을 사용하는 것을 고려해 보셨습니까? 나는 나 자신이 git에 상당히 부분적이지만 많은 옵션이 있습니다. 그들은 모두 버전 간의 차이를 잘 지원하며 이런 종류의 워크로드에 대해 잘 최적화되는 경향이 있습니다.

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