2012-03-04 1 views
2

많은 트래픽이있는 이전 사이트를 대체 할 사이트에서 작업 중이므로 DB에 많은 데이터가 포함되므로 내 질문에 대한 답변이 무엇인지 성장을위한 mysql 테이블을 디자인하는 가장 좋은 방법은 무엇입니까?성장을 위해 mysql 테이블을 확장하는 방법

5 개의 테이블에 5 000 000 개의 행이 있고 테이블이 1 000 000 개의 행/테이블로 나누어 져 있다고 가정 해 보았습니다. 그러나이 옵션은 좋지 않습니다. 내 데이터가 어떤 테이블인지 파악하는 데 많은 시간과 자원을 소비합니다.

혹시 몇 가지 유용한 정보를 알려주시겠습니까?

+1

원하는 파티션 : http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html – imm

+0

아니면 MySQL 클러스터를 사용하고 싶을 수도 있습니다. 아마도 돈을 쓰는 시간 일 겁니다. 전폭적 인 지원이 제공되며 사전 판매 지원에 문의 할 수도 있습니다. – hakre

답변

1

아니요, 당신은 절대적으로 관계에 있습니다. 이 기술은 Normalization이라고하며, 개별 테이블은 시간에 영향을 받고 다른 테이블과 독립적이기 때문에 별도의 테이블을 정의합니다.

객실과 손님을 추적하는 호텔 데이터베이스가있는 경우 객실과 손님이 서로 독립적이기 때문에 정규화가 필요하다는 것을 알고 있습니다.

하지만 특정 테이블을 입력하는 특정 게스트를 관련시킬 수있는 각 테이블 (예 : room_id)에 외래 키/대리 키가 있습니다.

귀하의 경우, 정규화는 귀하의 경우 5000 개의 행을 최적화하는 데 도움이 될 수 있습니다. 이는 루프가 5000 개 이상의 요소를 탐색하고 전체 데이터를 검색하는 데 적합하지 않기 때문입니다.

여기 데이터베이스 관리에서 정규화가 필수적인 이유는 example입니다.

+0

그래서 DB를 쿼리해야합니까? 내부 가입? 예 : INNER JOIN table1, table2, table3, table4, table5 .... – Uffo

+0

내부 결합은 그렇게 똑똑하지 않습니다 ... 하나의 큰 테이블과 같은 시간이 걸리기 때문에 ... 그러나 probabily 거기에 방법을 찾고, 당신이 찾고있는 데이터가 어떤 테이블에 있는지 알 수있는 몇 가지 주요 참조가 있습니다. – Uffo

+0

간단한 JOIN을 할 수 있습니다. 예를 들어'$ query = "SELECT room_number, room_guest FROM room from JOIN guest room.room_id = guest.room_id where booking_data = '$ date'";'특정 날짜에 대한 방 예약 정보를 room과 '손님 '테이블. room_id가 게스트 테이블의 외래 키인지 확인하십시오. – jmishra

1

주석에 언급 된대로 분할하는 것이 한 가지 방법이지만, 체크 아웃 할 첫 번째 경로는 대용량의 데이터가있는 테이블을 일부 내부 데이터를 기반으로 실행 가능한 청크로 분해 할 수 있는지 판단하는 것입니다.

예를 들어, 거대한 연락처 테이블이 있다고 가정 해 보겠습니다. 당신은 근본적으로 ad, ej 등에서 시작하는 연락처로 데이터를 분류 할 수 있습니다. 그런 다음 레코드를 추가 할 때 올바른 테이블에 레코드를 추가하면됩니다 (이 처리를 위해 저장 프로 시저를 체크 아웃하는 것이 좋습니다. 그래서 논리는 데이터베이스에서 조절됩니다). 또한 같은 테이블에서 데이터를 가져 오기 위해 저장 프로 시저를 설정하는 것이 좋습니다. 그러나 이렇게하면 자동으로 증가하는 ID를 사용하면 제대로 작동하지 않고 모든 테이블에서 고유 한 ID를 유지할 수 없으므로 올바르게 작동하지 않는다는 것을 인식해야합니다.

물론 간단한 솔루션입니다. 대규모 데이터 세트에는 다른 스토리지 솔루션, 클러스터링, 파티셔닝 등을 포함하는 수많은 솔루션이 있습니다. 이러한 것들을 수동으로 수행하면 직접 "수동 솔루션"에 대해 약간의 이해를 얻을 수 있습니다.