2009-03-18 4 views
10

SQL 테이블의 크기가 너무 큰지에 대한 굳건한 규칙이 있습니까?얼마나 많은 행의 데이터가 너무 많은 데이터 행입니까?

우리는 SCORM 추적 데이터를 이름/값 쌍 형식으로 저장하고 있으며 코스 당 사용자 당 4-12 개의 행이있을 수 있습니다. 길 아래에는 수백 개의 코스가 있기 때문에 나쁜 것입니다. 수천 명의 사용자가 있습니까?

답변

8

나는 개인적으로 5 천만 행의 테이블을 가지고 있으며, 이것은 내가들은 것에 비해서 작다. 파티셔닝으로 구조를 최적화해야 할 수도 있지만 환경에서 시스템을 테스트하기 전까지는 시간을 낭비하지 않아야합니다. 당신이 설명한 것은 작은 IMHO

나는 SQL Server 2000 & 2005를 사용하여 추가해야합니다, 각 DBMS는 자체 크기 조정 limitions 있습니다.

+1

2009 년에 답글을 올렸습니다. 행 개수를 알려주세요. 알고 싶을뿐 아니라 하드웨어 구성에 신경 쓰시면됩니다. Wikipedia에 28,103,538 개의 기사가 있지만 항상 약 400 개의 서버를 사용하고 있기 때문에 항상 혼란스러워합니다. 나는 왜 그것들이 정적 인 페이지 들이냐고 묻는다면 ... 당신의 대답에 감사드립니다. – Bujji

+2

@Bujji SQL 2008에서 테라 바이트 크기의 DB 작업을 한 이유는 WikiPedia에 400 대의 서버가 필요한 이유입니다 ... 한 서버에서 한 문서를 매우 빠르게 제공 할 수는 있지만 한 페이지를 제공하지는 않을 것입니다. 한 번에 한 사용자에게, 그들은 수천 명의 사용자가 페이지에 액세스 할 가능성이 높습니다. – JoshBerke

+0

조쉬 감사합니다. 내 의견에 답하십시오. 이것은 나를 돕는다. 그리고 당신은 매우 도움이된다 – Bujji

2

아니요. 모두 비즈니스 요구 사항에 따라 다르므로 예상 행 수를 지원하는 제품을 구입해야합니다.

11

마법 수는 수십억입니다. 수십억 개의 데이터 행이 생길 때까지는 대단히 많은 데이터를 말하는 것이 아닙니다.

수학을 수행하십시오.

코스 당 사용자 당 4-12 행, ... 수백 개의 코스 및 수천 명의 사용자가 있습니까?

400,000-1,200,000 행. 행당 1000 바이트라고 가정합시다.

그건 400Mb에서 1.2Gb의 데이터입니다. Apple 매장에서 100GB 드라이브를 299 달러에 구입할 수 있습니다. 더 이상 중요하지 않은 세부 사항에 대해 299 달러 이상의 청구 가능 시간을 쉽게 보낼 수 있습니다.

1TB의 데이터 (1,000Gb)가 될 때까지는 많은 데이터가 필요하지 않습니다.

+0

또는 Newegg에서 $ 33.99의 80GB – Tmdean

+0

100gb의 drive for $ 299?어쩌면 5 년 전! 오늘 당신은 100 달러에 1TB를 얻을 수 있습니다! – rmeador

+10

그래,하지만 그는 "애플 스토어에서"라고 말했다. 100 달러 미만의 가격으로는 마우스를 거의 구할 수 없습니다. –

6

100 (코스) * 1000 (사용자) * 10 (기록) 만 백만입니다. 저급이지만 괜찮은 데이터베이스는 괜찮습니다.

이름/값 쌍인 경우 소리가 나지 않습니다. 그러면 올바르게 색인을 생성 할 수있는 능력이 떨어지며, 이는 우수한 실적을 달성하는 데 중요합니다.

2

아니요, 실제로 테이블에 가질 수있는 행 수에 대한 엄격한 규정은 없으며 행에있는 데이터의 양과 데이터를 얼마나 잘 색인화 할 수 있는지에 따라 다릅니다.

귀하가 진술 한 수치에 대한 빠른 견적은 수천만 개의 행을 제공합니다. 확실히 그렇게 많이는 아니지만 약간 조심하지 않으면 문제가 될 수 있습니다.

아마도 테이블을 정규화 할 수 있습니까? 동일한 이름이 많이 발생하기 때문에 이름을 별도의 테이블에 넣고 테이블의 ID를 사용할 수 있습니까?

1

여기에는 한계가 있지만 드라이브 공간이 없다고 생각합니다. 그러나 좋은 인덱스를 추가하는 동안 테이블이 커지면 인덱스를 추가하는 데 시간이 오래 걸리기 때문에 작습니다. 게다가 잘못된 인덱스가 있으면 쿼리가 느리게 실행되고 사람들은 실제로 아무 것도 잘못하지 않을 때 불평 할 것입니다.하지만 인덱스가없는 것은 진절머리 나는 것입니다.

3

한 번 이름/값 쌍 테이블에 3 억 개가 넘는 행이있는 웹 양식 시스템에서 작업했습니다. 대부분의 양식에는 양식 제출 당 300 개가 넘는 행이 있습니다. 성능이 실제로 그렇게 나쁘지는 않았지만 쿼리하는 전체 PITA였습니다! 내 공연은이 공연의 삶에서 확실히 향상되었습니다.

하지만 IMHO라면 표준 정규화 된 테이블을 선호한다고해도 과언이 아닙니다.

0

2B 행의 데이터가있는 테이블을 만들려고 노력한 데이터베이스에서 작업했습니다. 작동하지 않지만 500M으로 다시 설계되었습니다. 큰 테이블 작업을 할 때 가장 큰 문제 중 하나는 삭제 작업에 소요 된 시간이었습니다. 오래된 레코드를 보관 한 다음 주 테이블에서 삭제하는 방식을 자주 보았습니다. 테이블이 충분히 크면 인덱스가 다시 작성 될 때 많은 시간 동안 삭제가 실행됩니다.

잘린 느낌이 들지만 테이블에서 10M 이상의 행이 너무 큽니다. 우리의 접근 방식은 데이터를 날짜별로 나누는 것이 었습니다. 그래서 DataWarehousing에서 매우 일반적이었던 한 주 동안의 데이터와 한 달 동안의 요약 테이블, 그리고 몇 년 동안의 또 다른 요약 테이블로 끝났습니다. BTW 이것은 SQL 7.0에서 DB의 유형이 더 나은지 알고 싶습니다.

+0

오라클에서는 파티셔닝을 사용합니다. 날짜가 다른 데이터는 다른 파티션으로 이동합니다. 이전 파티션은 테이프에 보관하고 "ALTER TABLE DROP PARTITION"과 같은 것으로 초 단위로 삭제할 수 있습니다. – jva

4

엄격하고 빠른 규칙은 없지만 번호를 얻는 것은 어렵고 빠른 방법입니다.

예상되는 실제 데이터 형식 (예 : 비슷한 규칙 성, 문자, 패턴 등)에 대략 유사한 더미 데이터로 테이블을 채우는 프로그램 작성 더미 데이터가 포함 된 실제 쿼리를 사용하여 성능 테스트를 실행하고 점진적으로 증가시킵니다 테이블의 행 수 (아마도 1000 또는 10000 행 단위).

쿼리 성능 (예 : 초당 완료 된 쿼리)이 용납 될 수 없을 때 "너무 큰"행 수가 생깁니다.

+0

더미 데이터를 창조적으로 생성 할 수 있습니다. 표의 열이 영어 텍스트로 구성되어 있으면 사전에서 임의의 단어로 채 웁니다. 이름이 포함되어 있으면 이름 목록을 다운로드하고 가짜 이름을 만들어 예상되는 빈도로 테이블에 넘칩니다. – Triynko

+0

+1 좋은 실용적인 팁. –

0

귀하의 질문은 답변보다 더 많은 질문을합니다.

  • 어떤 데이터베이스 엔진을 사용하고 있습니까? 그것 없이는 당신에게 좋은 대답을 만들어 내기가 어렵습니다.
  • 테이블 구조 란 무엇입니까? 데이터 유형에 따라 디스크에서 테이블을 레이아웃하는 방법은 이것에 달려 있습니다.
  • 왜 사용자/코스 당 하나의 레코드를 저장하지 않습니까? SCORM 데이터를 저장하면서, 이것은 당신이 완료, 성공, 시도, 합계 시간 등과 같은 표준 SCORM 데이터를 저장하고 있다는 것을 의미한다고 가정합니다.이를 위해 여러 행을 작성할 필요가 없습니다.

나는 SCORM 데이터를 저장하는 데이터베이스를 몇 개 만들었으며 사용자가 제안한 것처럼 태그/값 시스템으로 갈 필요가 없었습니다.

테이블의 행 수 (바이트 수)는 테이블의 행 수 (바이트)가 아닙니다. 간단히 :

테이블 크기 = 행 크기 (평균) * 행

질문 물어 "테이블이 너무 큰 것이 얼마나 큰"입니다 수?

관련 문제