2010-07-29 2 views
13

응용 프로그램의 코드 및 구성 파일은 코드 저장소에 유지 관리됩니다. 그러나 때로는 프로젝트의 일부로 때로는 데이터베이스에 저장되는 일부 데이터 (경우에 따라 100MB 이상, 1GB 이상)가 있습니다. Git은 코드와 그 변경 사항을 처리하는 데 좋은 역할을하지만, 어떻게 개발 팀이 데이터를 쉽게 공유 할 수 있습니까?응용 프로그램과 함께 데이터 세트를 관리하는 방법은 무엇입니까?

대부분 코드 크기가 큰 이진 파일이기 때문에 코드 버전 제어 시스템에 적합하지 않으며 악의적 인 업데이트가 될 수 있습니다. 그러나 일부 코드 개정이 스키마 (예 : 마이그레이션)를 변경하기 때문에 저장소와 동기화해야합니다.

어떻게 이러한 상황을 처리합니까?

+0

데이터 란 데이터베이스 또는 일부 플랫 파일 (예 : 영화 또는 mp3 파일 모음)의 데이터를 의미합니까? – slebetman

+0

내 경우에는 그것의 데이터베이스. 일부 XML/JSON/SQL 파일로 내보낼 수 있지만 매우 큰 파일이됩니다. –

답변

4

우리는 데이터와 스키마를 xml에 저장하고 liquibase을 사용하여 스키마와 데이터에 대한 업데이트를 처리합니다. 여기에있는 장점은 파일을 비교하여 진행중인 작업을 확인하고 모든 VCS와 잘 작동하며 자동화 할 수 있다는 것입니다.

데이터베이스의 크기 때문에 이것은 "버전 0"상당한 파일을 의미합니다. 그러나 마이그레이션 전략을 사용하면 업데이트는 델타 일 뿐이므로 관리가 가능해야합니다. 기존 마이그레이션을 liquibase으로 일대일로 변환 할 수 있으며 이는 빅뱅 접근 방식보다 좋을 수 있습니다.

델타가 매우 큰 경우 각 개발자가 델타를 개별적으로 적용 할 필요가 없으므로 @belisarius의 전략을 활용할 수도 있습니다.

2

일반적으로 데이터베이스 동기화 또는 복제 스키마를 사용합니다.

각 개발자는 데이터베이스의 복사본이 두 개 있습니다. 하나는 작업용이고 다른 하나는 동기화 버전을 유지하는 것입니다.

코드가 동기화되면 스크립트는 데이터베이스 ("죽은"개발자의 복사본과 중앙 DB)도 동기화합니다. 그 후 각 개발자는 자신의 작업 복사본을 업데이트합니다. 때로는 개발자가 데이터 일부를 보관해야하므로 이러한 두 번째 업데이트가 항상 표준 스크립트에 의해 구동되는 것은 아닙니다.

복제 스키마만큼 강력합니다 .... 때로는 (DB에 따라 다름) 희소식을 나타내지 않습니다.

3

데이터베이스에 바이너리 라이브러리 종속성이 많은 것으로 보입니다. 합리적인 코드 라이브러리보다 크기가 크고 바이너리이며 여러 버전에 해당하는 고유 한 버전이 있습니다. 귀하의 코드베이스.

이것을 염두에두고 빌드 프로세스에 종속성 관리자 (예 : Apache Ivy)를 통합하고 데이터베이스를 관리하도록합시다. 이는 종속성 관리자가 구축 한 일종의 작업처럼 보입니다.

데이터/다운로드의 엄청난 크기에 관해서는 데이터를 델타 가능 형식 (XML/XML 형식)으로 직렬화 할 수 없다면 마법의 탄환 (심각한 문서 사전로드 인프라의 부족) 당신이 언급 한 JSON/SQL).

두 번째 접근법 (종속성 관리와 호환되지 않을 수도 있음) : 코드의 특성상 허용되는 경우, 기본 (버전 0) 데이터베이스를 가져 와서 가져올 수있는 수동 diff 인 두 번째 파일을 보관할 수 있습니다 모든 개발자는 깨끗한 버전 0을 유지해야합니다. 변경된 DB가있는 버전의 풀은 pull diff 파일, 버전 0을 작업 데이터베이스로 복사, diff 파일을 적용합니다.상당한 크기의 DB에서는 diff 파일을 적용하는 데 약간의 시간이 걸릴 수 있으므로 처음 다운로드 할 때와 똑같은 시간을 절약 할 수는 있습니다.

+0

그렉 덕분에, 첫 번째 솔루션은 시원하게 들립니다. 나는 그것을 조사 할 것이다. 두 번째 솔루션 인 db 데이터 마이그레이션은 이론적으로 매우 훌륭하지만 실생활에서 작동하도록 할 수는 없었습니다. (현재 사용하고 있는데 이것이 내 질문의 이유입니다.) 이유를 설명하는 데 댓글보다 오래 걸립니다. 나는 그것에 관하여 blog 포스트를 아마 써야한다 :) –

+0

@Ofri, 확실히 이해된다. 여전히 일반적인 경우에 유용 할 수 있습니다 - 비슷한 상황에서 가장 자주하는 일입니다. 불행히도, 나는 거기에 몇 가지 큰 다운로드와 주위에 방법이있을 것 같아요 ... 우리가 전화 접속을 과거 이동 좋은거야. :-) – Greg

+0

핵심 부분은 "여러분의 코드베이스의 다양한 버전에 대응해야합니다."라고 생각합니다. . 단위 테스트를위한 데이터 (예 :)가 너무 빠르게 발전하여 예상되는 코드가 커밋하는 것보다 훨씬 빠르기 때문에 모든 개발자가 이에 동의하는 것은 아닙니다. Just my 2c –

1

DataGrove은 데이터베이스의 버전 제어 기능을 제공하는 신제품입니다. 우리는 데이터베이스 전체 (스키마 및 데이터)를 저장하고, 태그 지정하고, 언제든지 데이터베이스를 복원하고 공유 할 수 있습니다.

당신이 찾고있는 것처럼 들립니다.

우리는 git-like (push-pull) 비헤이비어를 허용하는 기능을 개발 중입니다. 따라서 개발자는 필요할 때마다 최신 버전의 데이터베이스를로드 할 수 있습니다.

관련 문제