2011-04-05 3 views
1

저는 SQL 세계에 상당히 익숙하며 32Hz까지 실시간 데이터를 기록 할 데이터베이스를 설계하고 있습니다. 기본 키의 일부로 타임 스탬프를 사용하거나 적어도 고유하게 만들려면 논리적 인 것처럼 보입니다 (그리고 아마도 다른 정보와 합성됩니다). 내 질문은 테이블의 크기가 증가함에 따라 성능에 관한 것입니다. 순진하게 생각해 보면 데이터베이스가 타임 스탬프를 확인해야 할 때마다 레코드를 삽입 할 때마다 고유 한 것이므로 잠시 후에 상황이 정말 느려질 것이라고 생각합니다. 하지만 또 다시 이것은 아마도 수 년전에 해결 된 데이터베이스 최적화 도구 일 것이며 대용량 데이터베이스에서 고유 한 타임 스탬프를 정의하는 것이 효율적입니다.데이터베이스 레코드에 고유 한 datetime 또는 timestamp를 사용하는 것이 좋지 않습니까?

참고 데이터베이스에 MySQL과 타임 스탬프를 사용하고 있습니다. 또한 고유 한 타임 스탬프가 실제로 필요하지는 않습니다. 스키마가 가능한 한 정확하게 정의되었다는 것을 알게되었습니다.

답변

0

MySql의 날짜/시간 유형은 1 초의 분수를 저장할 수 없습니다. datetime 또는 timestamp 열을 따라 여분의 열에 분수를 저장해야합니다. 분수는 응용 프로그램에서 제공해야합니다.

매우 큰 테이블에서 타임 스탬프를 고유하게 설정하면 삽입 속도가 느려집니다. 그것이 실시간 캡처라면 32Hz에서 생존 할 수 있습니다.

+0

분수 초 정도의 좋은 점, 나는 그것을 놓쳤습니다. @Marin이 말했듯이 <1Hz 표의 샘플 수에 시퀀스 분모를 사용하는 것이 더 적합합니다. 나는 테이블에 고유 한 제한 조건을 두는 것을 분명히 할 것입니다. – dwxw

+0

버전 5.6부터 MySQL은 마이크로 초 수준으로 시간을 처리 할 수 ​​있습니다. – Funbit

0

기본 키를 auto_increment 필드와 다른 것으로 사용하는 것이 좋습니다. 그렇게하면이 데이터를 읽는 데 사용하려는 키에 따라 쉽게 처리 할 수있는 기본 키가 있음을 알 수 있습니다.

그렇다면 특히 데이터가 32Hz에서 100 % 일반이 아닌 경우 타임 스탬프를 사용하는 것이 좋습니다. 데이터가 추가 된 시점을 어떻게 알 수 있습니까?

0

모두 저장하려는 레코드 수에 따라 다릅니다. 1 시간, 하루 ...? 비록 더 나은 (더 빠르지 만 더 많은 공간을 소비하는) 솔루션은 기본 키를 자동으로 증가시키고 참조를위한 타임 스탬프를 저장하는 것이지만, 데이터가 순차적이면 (나는 그렇다고 가정합니다.) 타임 스탬프가 필요하지는 않지만 자동 증가됩니다 필드가 시퀀스 분모가됩니다.

2

"실제로 타임 스탬프가 필요하지 않습니다." 그런 다음 실제 비즈니스 요구 사항을 파악하고 적절한 키를 결정하는 것이 좋습니다. 견고한 데이터베이스 디자인은 비즈니스 도메인을 정확하게 모델링하고 해당 도메인의 규칙을 구현하며 사용자가 다른 요구 사항을 충족시키는 디자인입니다. 가능한 모든 요구 사항에 대한 귀하의 질문에 대한 하나의 대답은 없습니다.

관련 문제