2009-08-02 2 views
34

나는 stackoverflow와 wikipedia와 같은 사이트를 궁금해했다. 편집 된 내역을 무기한 저장하고 사용자가 편집 내용을 롤백 할 수있게했다. 누군가 적절한 기술 (예 : 데이터베이스 등)을 사용하여이를 수행하는 방법에 관한 자료/서적/기사를 추천 할 수 있습니까?편집 내역을 효과적으로 저장하는 방법은 무엇입니까?

고마워요!

+3

+1 좋은 질문입니다. –

답변

14

다양한 옵션이 있습니다. 가장 단순한 것은 물론 모든 버전을 독립적으로 기록하는 것입니다. 게시물이 보통 여러 번 편집되지 않는 stackoverflow와 같은 사이트의 경우 적절합니다. 그러나 위키 피 디아 (wikipedia)와 같은 무언가를 위해, 사람은 공간을 절약하기 위해 더 영리해야합니다.

위키 백과의 경우 페이지는 처음에는 각 버전이 별도로 저장된 text table에 저장됩니다. 주기적으로 많은 수의 이전 버전이 함께 압축 된 다음 단일 필드로 압축됩니다. 반복이 많으므로이 방법으로 많은 공간을 절약 할 수 있습니다.

일부 버전 제어 시스템에서이를 수행하는 방법을 살펴볼 수도 있습니다. 예를 들어, subversion은 skip deltas을 사용합니다. 여기에서 개정판은 개정판과의 차이로 내역의 중간에 저장됩니다. 이것은 하나의 관심 개정을 재구성하기 위해 최대 O (lg n) 개정을 조사해야 함을 의미합니다.

힘내, 반면에 위키 백과의 접근 방식과 비슷한 것을 사용합니다. 수정본은 개별적으로 압축 된 '느슨한'객체로 저장되고 주기적으로 git는 모든 느슨한 객체를 취해 다소 복잡한 경험에 따라 정렬 한 다음 '가까운 객체'사이에 압축 된 델타를 작성하고 결과를 packfile으로 덤프합니다. 파일을 재구성하기 위해 읽어야하는 개정 수는 팩 작성 프로세스에 대한 인수로 제한됩니다. 이것은 어떤 경우 델타가 비 관련 객체간에 구축 될 수 있다는 흥미로운 특성을 가지고 있습니다.

+1

건너 뛰기 델타에 대해 알지 못했지만, <3 로그 알고리즘 – Patashu

관련 문제