문제

나는 디자인하는 테이블에서 데이터베이스는 저장하는 로그 항목에서는 응용 프로그램.거기에 몇 가지는 내가 이것에 대해 생각 디자인은 평소보다 더 많은합니다.

  • 그러나 이러한 로그 항목을 사용되는 것에서 런타임 시스템에 의해 결정을 내려가 필요하므로 상대적으로 빠르게 액세스할 수 있습니다.
  • 그들은 또한 문제가 있다는 것이 많은 그들(12.5 백만 추가 한달 내 추정치)으로 추산하고 있다.
  • 나는 필요 없는 이상 마지막 30 45 일에 가장 결정을 위해 처리합니다.
  • 필요해요 그들 모두를 유지보다 훨씬 더 오래 45 일에 대한 지원 및 법률 문제를 가능성이 적어도 2 년입니다.
  • 테이블의 디자인은 매우 간단하다,간단한 모든 종류(아 blob 또는 아무것도),가능한 것 사용하여 데이터베이스 엔진에 넣어 기본적 데이터,에서 가장 중 하나입니다.
  • 면 그것은 어떤 차이를 데이터베이스는 Microsoft SQL Server2005.

내가 무엇을 생각하고 있었다는 것은 그들을 가지고 작성된 라이브이블/데이터베이스를 사용하여 다음 ETL 솔루션 이동"old"항목하는 아카이브이블/데이터베이스는 크고 느린 하드웨어입니다.

나의 질문은 당신의 모든 팁을,트릭 또는 제안이를 위한 데이터베이스/테이블의 디자인을 확인하는 이 작품뿐만 아니라 가능한가요?또한 당신이 생각하는 경우 그것은 나쁜 생각 알려주시기 바랍니다,그리고 당신이 생각하는 것은 좋은 생각이 될 것입니다.

도움이 되었습니까?

해결책

일부 데이터베이스는 "파티션"(예 : Oracle)을 제공합니다. 파티션은 동일한 정의를 가진 여러 테이블을 하나로 수집하는보기와 같습니다. 새로운 데이터를 다른 테이블에 정렬하는 기준을 정의 할 수 있습니다 (예 : 월 또는 주가 6).

사용자 관점에서 볼 때 이것은 단지 하나의 테이블입니다. 데이터베이스 POV에서 여러 개의 독립 테이블이므로 효율적인 방식으로 전체 테이블 명령 (Truncate, Drop, 테이블에서 삭제 (조건없이),로드/덤프 등)를 실행할 수 있습니다.

파티션을 가질 수 없다면보기와 비슷한 효과를 얻습니다. 이 경우, 한 번에 한 달에 한 번 뷰로 여러 테이블을 수집하고 나머지 데이터의 오래된 데이터가있는 한 테이블을 "무료"하기 위해이보기를 재정의 할 수 있습니다. 이제이 테이블을 효율적으로 보관하고, 지우고 큰 작업이 완료되었을 때보기에 다시 첨부 할 수 있습니다. 이것은 성능을 향상시키는 데 큰 도움이 될 것입니다.

편집] SQL Server 2005 이후 (Enterprise Edition)는 파티션을 지원합니다. 감사합니다 미치 밀

다른 팁

빅 테이블을 느리게 빠르게,그리고 그것은 큰 성과 오버헤드를 사용하 ETL 당겨하는 데이터에 기반한 날짜,서 테이블과 그의 행이 있습니다.이 대답은 사용하는 여러 테이블-아마 테이블 1 개/한 달에 기반하여 수치입니다.물론 당신은 몇 가지 논리를 생성 테이블에 있는 이름의 쿼리를 처리합니다.

동의함으로 트리거를 사용하여 채울'CurrentMonthAudit'테이블의 끝에 달할 수 있습니다 다음 이름을 바꾸는 테이블 MonthAuditYYYYMM.이전 테이블의 주요 사용하여 서버 ETL 될 것이 쉽게,그리고 각각의 테이블을 관리할 수 있습니다.나를 믿는 이보다 훨씬 더 노력하고 관리하는 하나의 테이블과의 약 250M 행이 있습니다.

당신의 먼저 좋은 결정을 내리는 모든 것을 유지하고 가능한 한 간단합니다.

나는 좋은 당신의 패턴의 간단한 쓰기 전에 트랜잭션 로그 파일을 기록은 누 시간 순서대로 표시합니다.다음 옵션은 여러 가지가 있 전환된 데이터.심지어는 매달 다른 테이블을 쿼리를 관리-현명한 만큼 당신을 유지합니다.만약 당신이 어떤 종류의 복제에서 작업,복제 테이블이 롤아웃할 수 있습으로 아카이브입니다.다음 시작과 함께 신선한 빈의 테이블에 최초의됩니다.

일반적으로 저는 전율에 관계 설계의 결과가 뭔가 다음과 같이지만,내가 찾는 쓰기 전용 연대순으로 로그 테이블은 예외적으로 일반적인 디자인 패턴 이유에 대해 다루고 있는 여기에.

그러나 멀리이에서 트리거합니다.까지 가능합니다.가장 간단한 솔루션은 기본 테이블의 유형은 당신에 대해 이야기하고,여기에 간단한 강력한 off-the-shelf 시간이 입증된 복제 메커니즘이 있습니다.

(BTW-대형 테이블을 느리게 하지 않는 경우 신속하게 그들이 잘 설계되었다-그들은 천천히 천천히.)

최근 로그 레코드를 검색 할 필요가없는 경우 다른 옵션이 있습니다. 데이터베이스를 전혀 사용하지 마십시오. 대신 로그 정보를 파일에 쓰고 매일 밤 파일 이름을 돌리십시오. 파일이 작성되면 배경 작업을 시작하여 데이터를 아카이브 데이터베이스로 직접 가져올 수 있습니다.

데이터베이스는 항상 최선의 옵션이 아닙니다. 특히 로그 파일의 경우 :)

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