2010-01-13 3 views
2

현재 관계형 데이터베이스에서 수정 된 튜플을 추적해야하는 프로젝트에서 작업 중입니다. 여기에는 업데이트 된 튜플뿐만 아니라 삽입 및 삭제 된 튜플이 포함되어야합니다. 내 질문은 이것을 성취하는 가장 좋은 방법이 무엇일까? 나는 내 생각에 대해 여러 가지 아이디어를 가지고 있지만 어쩌면 내가 생각하지 못했던 더 쉽고/더 좋은 방법이있을 수도 있고, 정확하게 이것을 수행하는 프로젝트가 이미 존재할 수도있다.데이터베이스에서 수정 된 튜플을 추적하는 가장 좋은 방법은 무엇입니까?

프로젝트의 최종 목표는 다른 공급 업체의 관계형 데이터베이스에서 작동하지만 첫 번째 구현에서는 MySQL 데이터베이스를 사용한다는 것입니다. 다른 데이터베이스 시스템은 나중에 지원 될 수 있습니다. 그러나 MySQL에서 작동하는 솔루션을 다른 데이터베이스에 쉽게 적용 할 수 있다면 좋을 것입니다.

첫 번째 아이디어는 로그 파일을 구문 분석하는 것이 었습니다. 그러나 이러한 로그 파일에 실제 수정 된 튜플이 포함되어 있는지 여부는 확실하지 않으며 이러한 로그 파일을 항상 사용할 수있는 것은 아니라고 생각할 수도 있습니다 (예 : 공유 호스팅).

두 번째 아이디어는 응용 프로그램 수준에서 쿼리를 가로채는 것입니다. INSERT, DELETE 또는 UPDATE 쿼리가 수행되면 이러한 쿼리를 구문 분석 할 수 있으며 영향을받는 튜플을 미리 결정할 수 있습니다. INSERT 연산의 경우 이것은 단순히 삽입 된 튜플이고, DELETE 또는 UPDATE 연산의 경우 튜플은 새로운 SELECT 문에 WHERE 절을 적용하여 식별 할 수 있습니다.

마지막 발언에서이 성능이 개발 단계의 중요한 요소는 아니라고 덧붙였습니다.

자세한 내용이 필요하면 알려 주시면됩니다.

+0

변경 사항을 관계형 데이터에 기록하는 방법에 대한 제안 사항이 있습니까? 그렇다면, 이것은 여러 번 중복 된 것입니다 - 그래서 "감사 로깅"을 검색해보십시오. 예를 들어 http://stackoverflow.com/questions/2015232/database-design-for-audit-logging 및 http://stackoverflow.com/questions/1439173/enterprise-data-auditing을 참조하십시오. –

답변

2

트리거를 사용하여 INSERT, UPDATE 및 DELETE를 캡처하고 항목을 새 테이블에 기록하십시오. 해당 테이블의 시간 소인을 사용하여 트랜잭션이 발생한시기를 기록 할 수 있습니다. 나중에 수정 정보에 대해 해당 테이블을 쿼리 할 수 ​​있습니다.

0

일부 데이터베이스 종속 기능이 필요하지만 구조에 따라 캡슐화 할 수는 있지만 일반적으로이 기능을 제외하고 데이터베이스 트리거를 사용할 수 있습니다. 감사. 각 종류의 트리거에서 필요한 정보를 로그 테이블에 간단하게 쓸 수 있습니다. 한 가지 제안.

관련 문제