2012-09-24 2 views
1

까지 대용량 데이터를 읽지 않으려면 블록 사용자없이 이전 데이터를 제거하는 방법 모든 데이터를 삭제하고 대신 새 데이터를 가져 오는 거대한 테이블이 24 시간마다 필요합니다.새 데이터를 테이블에 삽입하고 프로세스가 끝날 때까지 (예 : MySql)

이 테이블을 자르고 블록 사용자없이이 테이블의 데이터를 읽을 수있는 새로운 데이터를 삽입하려면 어떻게해야합니까? (더 나은 어떤 옵션을 쓰기 이상의 적절한 옵션 또는 표준 용액 제안 해주십시오)

옵션 1 : 내가해야 할 무슨 생각

1. insert new data to temp table 
2. drop old table 
3. rename temp table to the table name 

옵션 2를 (문제 : 사용자가 중간에 테이블 데이터에 액세스하지 못할) : 당신이 오래된 데이터가있는 경우

1. truncate the table 
2. insert new data to table 
+0

사용자에게 중단없는 읽기 액세스를 원할 경우 대체하기 전에 대부분의 데이터가 유효해야합니다. 따라서 변경된 데이터를 선택적으로 업데이트하고 전체 테이블을 삭제하는 대신 새 데이터를 삽입하는 것이 좋습니다. –

+0

그러나 잘라내 기와 삽입에 비해서 시간이 많이 걸리는 프로세스입니다. – AnandPhadke

+0

단일 트랜잭션에서'delete '&'insert'를 사용하지 않으시겠습니까? 그렇게하면 다른 사용자는 커밋 될 때까지 변경 사항을 볼 수 없습니다. –

답변

1
1.insert new data to temp table 
2.CREATE TABLE newtable select * from oldtable where 1=2 
3.drop old table 
4.INSERT INTO newtable select * from temp 
+0

고맙습니다.하지만 이전 테이블의 데이터가 필요 없습니다. – Yosef

+0

여기 임시 테이블과 이전 테이블 구조는 동일해야하므로 위와 같이 말했습니다. – AnandPhadke

1

유지하기 :을테이블에 ID 열을 추가하십시오. 행의 모든 ​​열 값으로 계산 된 해시 값으로 채 웁니다. 새 데이터를 임시 테이블에로드하십시오. 변경된 행과 새 행으로 이전 데이터를 갱신하십시오. 그렇지 않으면 테이블의 이름을 바꾸는 데 mch 시간이 걸리지 않으므로 첫 번째 해결 방법이 있습니다.

+0

유지할 오래된 데이터가 없습니다. – Yosef

관련 문제