내 2 펜스 가치. 약간 그리움이긴하지만 ...... 저도 인큐베이션 프로젝트에서 비슷한 요구 사항이있었습니다. 당신과 마찬가지로 문서 버전 관리와 함께 문서 데이터베이스 (내 경우 xml)가있는 내 주요 요구 사항. 협업 사용 사례가 많은 다중 사용자 시스템을위한 것입니다. 필자는 대부분의 주요 요구 사항을 지원하는 사용 가능한 오픈 소스 솔루션을 사용하는 것을 선호했습니다.
추격하기 위해 충분히 확장 가능한 방식 (사용자 수, 사용량, 스토리지 및 컴퓨팅 리소스)으로 두 가지를 모두 제공하는 제품을 찾을 수 없었습니다. 모든 유망한 기능에 대해 git에 편향되었습니다. (아마도) 그것으로 만들 수있는 해결책. git 옵션을 더 많이 사용하면서 단일 사용자 관점에서 다중 (밀리) 사용자 관점으로 이동하는 것이 분명한 도전이되었습니다. 불행히도 나는 당신처럼 상당한 성능 분석을하지 못했습니다. (.. lazy / quit early .... for version 2, mantra) Power to you !. 어쨌든, 내 편향된 아이디어는 다음 (여전히 편향된) 대안으로 변형되었습니다. 즉, 별도의 영역, 데이터베이스 및 버전 제어에서 가장 뛰어난 도구의 집합체입니다.
아직 작업이 진행 중이지만 (약간 무시 됨) 변형 된 버전은 간단합니다.
- 프런트 엔드에서 : (userfacing) 첫 번째 수준 저장소에 데이터베이스 사용 (사용자 응용 프로그램과의 인터페이스)
- 백엔드에서 버전 제어 시스템 (VCS) (예 : git)을 사용하여 데이터베이스에서 데이터 객체의 버전 관리를 수행합니다.
본질적으로 데이터베이스에 버전 제어 플러그인을 추가하고 일부 통합 접착제를 추가하는 것과 같습니다. 개발해야 할 수도 있지만 훨씬 쉬울 수도 있습니다.
작동 방식 (으로 가정)은 기본 다중 사용자 인터페이스 데이터 교환이 데이터베이스를 통해 이루어지는 것입니다. DBMS는 다중 사용자, 동시성 e, 원자 적 작업 등과 같은 모든 재미 있고 복잡한 문제를 처리합니다. 백엔드에서 VCS는 단일 데이터 개체 집합에 대해 버전 제어를 수행합니다 (동시성 또는 다중 사용자 문제 없음). 데이터베이스의 각 유효 트랜잭션에 대해 버전 제어는 효과적으로 변경되었을 데이터 레코드에 대해서만 수행됩니다.
인터페이싱 글루는 데이터베이스와 VCS 간의 단순한 연동 기능의 형태가 될 것입니다. 디자인 측면에서 간단한 접근 방식은 데이터베이스의 데이터 업데이트가 버전 제어 절차를 트리거하는 이벤트 기반 인터페이스 (힌트 : Mysql 가정 , 트리거 및 sys_exec () 사용)입니다. blah blah ...). 구현 복잡성 측면에서 간단하고 효과적인 것 (예 : 스크립팅)에서 복잡하고 멋진 것 (일부 프로그래밍 된 커넥터 인터페이스)에 이르기까지 다양합니다. 모든 것은 당신이 얼마나 미친 듯이 가고 싶은지, 그리고 얼마나 많은 땀 자본을 기꺼이 지출 하느냐에 달려 있습니다. 간단한 스크립팅이 마법을 수행해야한다고 생각합니다. 최종 결과 인 다양한 데이터 버전에 액세스하기 위해 간단한 대안은 VCS의 버전 태그 / ID / 해시에서 참조하는 데이터로 데이터베이스의 복제본 (데이터베이스 구조의 복제본에 더 가깝습니다)을 채우는 것입니다. 다시이 비트는 인터페이스의 간단한 쿼리 / 번역 / 맵 작업입니다.
여전히 처리해야 할 몇 가지 문제와 알려지지 않은 사항이 있지만 이러한 영향과 관련성은 대부분 애플리케이션 요구 사항과 사용 사례에 따라 달라집니다. 일부는 문제가되지 않을 수도 있습니다. 몇 가지 문제에는 두 가지 주요 모듈 인 데이터베이스와 VCS 간의 성능 일치, 빈도가 높은 데이터 업데이트 활동이있는 애플리케이션, git 측에서 시간에 따른 리소스 확장 (스토리지 및 처리 능력) 및 사용자가 포함됩니다. 성장 : 꾸준한, 지수 적 또는 결국 정체
위의 칵테일 중 제가 현재 양조하고있는 것은 다음과 같습니다.
- VCS에 Git 사용 (처음에는 두 버전 사이의 변경 세트 또는 델타 만 사용하기 때문에 처음에는 좋은 오래된 CVS로 간주 됨)
- mysql 사용 (내 데이터의 고도로 구조화 된 특성으로 인해 엄격한 xml 스키마가있는 xml)
- MongoDB를 가지고 놀기 (git에서 사용되는 기본 데이터베이스 구조와 거의 일치하는 NoSQl 데이터베이스를 시도하기 위해)
몇 가지 재미있는 사실-git은 실제로 압축 및 객체 개정 사이의 델타 만 저장하는 것과 같은 저장소를 최적화하기 위해 명확한 작업을 수행합니다. 예, git은 데이터 객체 개정 사이의 변경 집합 또는 델타 만 저장합니다. 언제 어떻게) . 참조 : Git 내부의 내부 에있는 packfiles
-git의 개체 저장소 (컨텐츠 주소 지정 파일 시스템) 검토는 mongoDB와 같은 noSQL 데이터베이스와의 놀라운 유사점 (개념 관점에서)을 보여줍니다. 다시 말하지만, 땀 자본을 희생시키면서 2를 통합하고 성능을 조정하는 데 더 흥미로운 가능성을 제공 할 수 있습니다.
여기까지왔다면 위의 내용이 귀하의 경우에 해당 될 수 있는지, 그리고 그것이 될 것이라고 가정하면 마지막 포괄적 인 성능 분석의 일부 측면에 제곱하는 방법을 알려주십시오.