2011-01-29 2 views
14

참고 : 다른 유사한 Q를 여기에서 검색했습니다. 그리고 다른 대답 된 질문도 원격으로 유사하지 않습니다. 그걸로 ... MySql에 대한 질문이 있습니다. 테이블 (정확하게 말하면 테이블의 특정 필드에 - tweets 또는 updates).MySQL 테이블의 최대 행 수는 무엇입니까

그래서 질문 ... InnoDB 테이블의 최대 행 수는 얼마입니까? MyIsam, InnoDB 및 다른 사람들이 보유 할 수있는 금액간에 상당한 차이가있는 경우 (일반적으로없는 경우). 둘째, 테이블이 실제로 커지면 데이터를 저장하는 가장 좋은 방법은 무엇입니까? (동일한 테이블 또는 분할/다중 테이블/DBS)?

나는 그 트위터가 하루에 100 만개의 트윗을 얻는다고 읽었습니다. 같은 맥락에서 두 번째 질문은 트위터 같은 것에 어떻게 적용됩니까?

답변

14

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html 키 크기의 제한을 계산할 수 있습니다.

하지만 겸손 참조 무결성과 InnoDB의 다른 기능과 트랜잭션 엔진 트윗과 같은 정보를 저장하지 않는 것이 좋습니다, 당신은 확실히은 하나의 DB에서 하나 개의 테이블에 그들 모두를 저장하지 않습니다 예. 당신은 그들을 빠르게 추가 할 수있는 많은 비 독립적 인 SQL 데이터베이스에 넣은 다음 해시 태그, RT 등과 같은 메타 정보를 좀 더 복잡한 데이터베이스로 추출합니다. Twitter DB 아키텍처의 프리젠 테이션은 Google (예 : http://www.slideshare.net/nkallen/q-con-3770885)에서 쉽게 할 수 있습니다.

대용량의 데이터를 하나의 테이블에 저장해야하는 경우 파티셔닝은 친구이며 Postgres가 더 잘 지원할 수 있습니다. 파티션 된 테이블은 실제로 논리적으로 하나의 테이블로 보이는 여러 테이블입니다. 이 서브 테이블 (파티션)을 다른 디스크에 넣고 유지 보수를 독립적으로 수행하는 등의 작업을 수행 할 수 있습니다. 또한 필수 컬럼 만 포함하는 매우 긴 테이블 하나와 더 크지 만 선택적 컬럼을 저장하는 다수의 테이블을 포함하는 "스타 스키마" 도움. 테이블의

+0

현재 (2015 년 말) MySQL은 Postgres보다 파티셔닝을 더 잘 지원합니다. RethinkDB와 같은 것이 nosql 솔루션으로 간주되어야합니다. – 9000

18
행 제한이 없다

하지만, InnoDB의 데이터베이스에 size limit :

최소 테이블 스페이스의 크기는 10MB이다. 최대 테이블 공간 크기는 억 개의 데이터베이스 페이지 (64TB)입니다. 이것은 테이블의 최대 크기입니다.

언제든지 horizontally partition 같은 테이블의 여러 파티션에 행을 여러 파일로 저장하여 테이블을 구성 할 수 있습니다.

+0

다른 질문은 어떻습니까? :) thanks –

+0

@avon_verma : updated – ash

+0

수평 분할이 샤딩으로 간주됩니까? @ash – edam

1

64TB의 한계는 다음과 같은 예외가 있습니다

innodb_page_size = 16K (기본값) 가정
  • . 이는 4K에서 64K 사이의 2의 거듭 제곱으로 설정하여 비례하여 테이블 공간 제한을 변경합니다.
  • PARTITIONed 테이블은 기본적으로 함께 구성되고 하나의 큰 테이블로 작동하는 '서브 테이블'의 묶음입니다. 파티션 수에 대한 5.6.7 이전 제한은 1024입니다. 그 후 8192가되었습니다. 따라서 64TB를 곱하면됩니다.

OK, 그건 단지 당신에게 바이트 제한을 제공합니다. 또한 오버 헤드 및 인덱스가 포함됩니다. 그런 다음 최대 레코드 수를 얻기 위해 평균 레코드의 크기로 나눠야합니다.

(평균 레코드 크기를 계산하는 것은 쉽지 않다.)

간단한 답 :

당신은 아마 쉽게 InnoDB의 테이블에 1 조 "작은"기록을 얻을 수 있습니다. 약간의 노력으로 1000 조에 달할 수도 있습니다. 하지만 그 전에는 디스크 드라이브 예산이 고갈 될 것으로 생각됩니다. 또한, 그것을 채우기 위해 모든 INSERTs을 할 년이 걸릴 것입니다!

그래서 현실적인 답 : MySQL은 '무제한'행 수를 처리 할 수 ​​있습니다.

실제 생활? 나는 십억 개가 넘는 열이있는 테이블 몇 개를 들었다. 심지어는 150 억 개가 넘는다.

Limits을 참조하십시오. 그러나 행의 질문에 대해서는 더 이상 말하지 않습니다.

+1

저의 마지막 직장에서 한 테이블에 5 억이 넘는 행이 있었고 여전히 빠르게 성장하고있었습니다. 그것은 우리의 서비스가 2007 년부터 배치 한 모든 전화 통화를 기록하는 DW였습니다. 우리는 최근 데이터의 경우 일별 파티션을, 이전 데이터의 경우 월별 파티션을 사용했습니다. –

관련 문제