2011-12-13 2 views
0

한 번에 한 시간에 많은 데이터를 테이블에 임시로 저장해야합니다. 예를 들어 매 시간마다 20k (또는 다른 큰 수의) 레코드를 씁니다. 나는 그 시간 동안 그 데이터로 몇 가지 일을하고, 시간이 끝날 때까지 테이블은 다시 비어 있습니다. 새 시간이 시작될 때 20,000 건 이상의 레코드를 추가하고 프로세스를 계속 진행합니다.매 시간마다 삽입 및 제거되는 많은 행이있는 테이블을 어떻게 관리해야합니까?

현재 INT 자동 증가 기본 키가있는 MySQL 테이블에 데이터를 저장하고 있습니다.

결국 숫자가 부족 해지고 문제를 해결하는 솔루션을 찾고 있습니다 (예 : 서명되지 않은 BIG INT를 사용). 몇 가지 솔루션을 생각해 볼 수는 있지만, 결과가 각각 무엇인지, 특히 MySQL에 미치는 영향에 대해서는 확신 할 수 없습니다. 예를 들어, 이렇게하면 테이블 손상이나 성능 문제 등을 일으킬 수 있습니다.

어떻게 이런 문제를 해결해야합니까?

  1. 재설정 각 시간
  2. 수행을 자동 증가 열을 생성하고 테이블에 각 시간
  3. 를 제거하거나 # 1, # 2,하지만
  4. 이 자동 증가를 사용하지 마십시오 이상 간격으로 키 (자신의 순차 키를 쉽게 삽입 할 수 있음)
  5. 기타?

참고 : 처리를 위해 매 시간마다 키를 다시 사용하지 않아도됩니다. 나는 데이터의 처리를 분배하기 위해서만 그것을 사용한다.

+0

5. MongoDB를 사용하십시오. – Ben

+1

@ 벤 : 정교하게 신경 써야 할까? –

+1

int unsigned는 24.5 년 (4294967295/175200000 p/yr)입니다. –

답변

0

정말로 테이블을 비우려면 TRUNCATE TABLE 명령을 사용해야합니다.이 명령은 데이터와 인덱스를 효율적으로 지우고 테이블 구조를 그대로 유지합니다.

1

테이블을 비울 때, 그 자동 증가 카운터 리셋 : 테이블 그것이 카운터 잎에서 행을 삭제

ALTER TABLE foo AUTOINCREMENT = 1; 

을, 당신이 표시된대로 결국 핵심 공간이 부족. 이 카운터를 재설정하고 매시간이 새로운 데이터 세트 일 때 상관 없지만 가장 효과적인 솔루션 인 것 같습니다.

0

언급하지 않은 것을 잊지 않는 한 언제든지 번호가 없어지지는 않을 것입니다 ... 쓰여진 기록의 양이 20k 레코드/시간에 머물러 있다면 현재 구현으로 12 년 이상이 걸릴 것입니다.

그리고

그것으로 충분하지 않은 경우하십시오 SERIAL ( BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE에 대한 별칭)를 사용하고 20K에 대한 레코드를 추가

/시간은 여전히 ​​당신에게 놀 억 100 년 이상을 줄 것이다 ; 테이블을 변경하거나 자동 입력을 재설정하지 않아도됩니다.

+0

int unsigned 24입니다.5 년 가치 –

관련 문제