2

MySQL DB에서 일부 이상한 디자인을 발견했을 때 일부 데이터를 표시하는 PHP 스크립트를 실행하라는 요청을 받았습니다. 사용자 당 최대 2000 개의 레코드를 수집해야하는 연구를 수행하고 등록하는 각 사용자에 대해 새 테이블을 자동으로 작성합니다. 이 단계에서 예비 학습으로 약 30 개의 테이블이 있지만 실제 연구를 위해 3000 명의 사용자가 있어야합니다.MySQL 테이블 잠금

나는 하나의 테이블에 모든 것을 모으라고 제안하고 싶었지만 연구 기간 동안이 데이터베이스에 분당 약 1500 회의 INSERT가 있었기 때문에 나는이 질문을 먼저 여기에서 물어보고 싶었다. MySQL에서 테이블 잠금이 발생합니까? 그래서 분 당 1500 개의 INSERT와 최대 6,000,000 개의 레코드 또는 3000 개의 테이블 (분당 30 개의 INSERT 및 최대 2000 개의 레코드)을 가진 하나의 테이블입니까? 첫 번째 옵션을 제안하고자하지만 문제가 발생하지 않도록하고 싶습니다. InnoDB에는 행 수준의 잠금이 있습니다. 그러면 더 나은 성능을 하나의 테이블 옵션과 함께 사용할 수 있습니까?

+0

질문을 반전하고 "왜 동일한 데이터를 저장하기 위해 여러 테이블을 만들까요?"라고 물어보십시오. 분명히 디스크 IO, 인덱싱 등은 동일합니다. 나는 그들이 그것이 myisam에서 테이블 잠금을 둘러 쌀 수있는 유일한 방법이라고 생각했는지 또는 그들이하는 일에 대한 단서가 없다고 생각합니다. 그것을 innodb로 뒤집어 뒤돌아 보지 마라. –

답변

0

이것은 거대한 질문입니다. 내 경험상 성능은 테이블 크기만으로는 정확하게 측정되지 않습니다. 그것은 설계하기 시작합니다. 기본 키와 색인이 제자리에 있습니까? 끝났어? 즉, 나는 또한 거의 항상 DB 로의 여행이 수십보다 빠르다는 것을 발견했다. 단일 테이블 (열)의 크기는 어느 정도입니까? 어떤 종류의 데이터를 저장하고 있습니까 (4000K 이상?). 무엇이 가장 잘 수행되는지 확인하기 위해 프로토 타입을 만들어야 할 수도 있습니다. 가장 권장할만한 것은 수집하고 할당하는 데이터의 크기를 신중하게 판단하고 인덱스를 만들거나 너무 많지는 않지만 인덱스를 작성하지 않고 테스트하는 것입니다.

+0

각 테이블에는 4 개의 열이 있고 각 행에는 텍스트 필드와 datetime 사이의 혼합 인 400 바이트 이하 여야합니다. RAID10 구성에 48GB의 RAM과 2 개의 6 코어 Xeon CPU와 6 개의 HD가 있다고 가정하면 6 백만 개의 레코드가있는 테이블 하나가 잘 작동한다고 생각합니다. 권리? 또한 사용자가 분당 (삽입 된 단어 수집) 생성 할 수있는 최대 값이기 때문에 삽입 레코드를 30 개의 레코드로 분당 한 번의 작업으로 제한하도록 요청할 수 있습니다. 그게 도움이 될까요? – MTI

+0

하나의 큰 작업을 수행하면 30 개의 작은 작업을 수행하는 것보다 "더 나은"작업이 수행됩니다. 즉, 나는 기술 문제로 인해 제품 사람들이 결국에는 사물을 변화시키는 것을 싫어한다. 차라리 가능한/가능할 때 기술 문제를 해결할 것입니다. 당신이 옳은 길을 걷고있는 것처럼 들립니다. –

+0

감사합니다. 나는 그들과 함께 그들의 DB와 데이터 수집을 재 설계하는 것에 대해 논의했고 그들은 그것을 할 것이다. – MTI