데이터 제공 업체가 분기별로 제공하는 텍스트 문서를 기반으로 작성한 약 3 천만 개의 행이있는 레일 앱이 있습니다. 거기에서 나는 다른 테이블과 조작 및 비교를 수행하고 사용자 정의 된 데이터로 추가 테이블을 작성합니다.레일 앱에서 대량의 데이터 업데이트하기
처음이 작업을 할 때 레일즈 콘솔을 통해 루비 스크립트를 실행했습니다. 이것은 느리고 분명히 최선의 방법은 아닙니다.
이 프로세스를 간소화하고 가동 중단 시간이 거의 없거나 최소한 다운 타임이없는 프로덕션 서버에서 업데이트하는 가장 좋은 방법은 무엇입니까?
이 내가 생각하고 과정이 지금은 최고입니다 :
이 데이터를 읽기 위해 레이크 작업을 만듭니다. activerecord-import 플러그인을 사용하여 배치 쓰기를 수행하고 activerecord 유효성 검사를 비활성화하십시오. 이 데이터를 새로운 중복 테이블에로드하십시오.
새로 생성 된 테이블에 대한 색인을 작성하십시오.
새로 만든 테이블의 이름을 레일스 응용 프로그램이 찾고있는 이름으로 변경하십시오.
오래된 것을 삭제하십시오.
이 모든 것을 프로덕션 서버에서 올바르게 수행 할 계획입니다.
더 좋은 방법이 있나요? 댓글에서
기타 사항 :
- 테이블은 이미
- 오래된 테이블과 데이터가 일회용
- 표는
- 다운 타임을
- 우리의 현재 서버 상황을 최소화해야 선택을 위해 고정 될 수있는 존재 2 개의 높은 CPU Amazon EC2 인스턴스입니다. 나는 그들이 1.7GB의 RAM을 가지고있어 전체 수입을 일시적으로 저장하는 것이 아마도 선택이 아니라고 생각한다.
- 새 데이터는 줄 바꿈 텍스트 파일입니다. 이미 Ruby로 작성된 구문 분석 용 스크립트가 있습니다.
resque 또는 delayed-job을 사용하여 백그라운드 작업으로 가져 오기를 실행할 수 있습니다.이 작업을 수행 할 때 서둘러 서버를 느리게하거나 서버 속도를 줄이지 마십시오. – nodrog
서둘러 조금. 저는 지금까지 3 개월마다 한 번씩 '영원히해야 할 것입니다. 가장 고통스럽고 자동화 된 프로세스를 마련하는 것이 더 중요합니다. – Patm
가능한 경로는 정확한 요구 사항에 따라 다릅니다. 필요한 테이블이 이미 있습니까? 구조가 항상 바뀌 었습니까? 테이블에 이전 데이터가 필요합니까? 새 데이터가 테이블의 이전 내용을 완전히 대체합니까? 테이블을 독점적으로 잠글 수 있습니까? 다운 타임을 최소화해야합니까? 가져온 전체 데이터를 일시적으로 보관할 수있는 충분한 RAM이 있습니까? –