2014-11-06 2 views
1

어느 쪽이 더 낫다 a 또는 b : a). 각 사용자에 대해 7 개의 테이블. user7 메시지, user7mail 등등.이 경우 우리는 1000 명의 사용자가 있다면 7000 개의 테이블이있을 것입니다.많은 수의 사용자를위한 데이터베이스 설계

b). 예를 들어 7 개의 테이블. 메시지, 메일 등 모든 usr의 모든 메일이나 메일은 같은 테이블에 있습니다. 이 경우 1000 명의 사용자에 대해 우리는 단 7 개의 테이블을 가지고 있습니다.

답변

0

처럼 될 수있는 '통신'테이블 말, 데이터베이스가 있어야한다 데이터가 실제로 관계형 인 한 너무 많은 고통없이 수천만 개의 레코드를 지원할 수 있습니다. 텍스트를 검색하거나 계층 적 데이터를 저장하거나 문서를 저장하거나 보고서를 실행하는 경우 대체 옵션 (예 : NoSQL)이 있습니다.

가능한 모든 관계형 데이터베이스를 사용하는 정통 방식을 고수하십시오. 즉, normalization, query tuning을 의미하며 캐시를 사용하고 문제가있는 하드웨어를 던지십시오.

성능 문제가 있음을 입증 한 후에 만 ​​더 많은 이국적인 솔루션을 살펴볼 가치가 있습니다. RDBMS 세계에서 이것은 partitioning 데이터를 의미 할 수도 있습니다 (사용자 별 테이블 아이디어와 비슷합니다). 또는 NoSQL으로 이동할 수도 있습니다.

"사용자 당 테이블"전략의 문제점은 색인으로 쿼리 할 때 거의 이점이 없다는 것입니다 (현대 RDBMS에서 인덱스를 치면 1 행 또는 백만 행이있는 테이블을 검색하는 것이 거의 없습니다) 데이터를 찾는 데있어 차이가 있음). 인덱스를 치지 않은 액션의 경우 괜찮은 이득을보아야합니다.하지만 대개는 처음부터 실제로 관계가 없다는 신호입니다 ...

오히려 오류가 발생하기 쉬운 클라이언트 애플리케이션을 개발합니다. 복잡한 SQL 쿼리 (예 : 다중 테이블 조인)를 만들 때 더욱 복잡해집니다. 결과적으로 이러한 쿼리를 튜닝하는 것이 더 어려워 질 것입니다. 데이터베이스 쿼리를 관리하는 데 사용할 수있는 도구 (예 : ORM 도구)는 모두 '표준'관계형 모델을 기반으로하므로이 도구를 사용할 수 없습니다.

가장 큰 문제는 데이터베이스를 변경하는 것입니다. "message"에 속성을 추가해야하는 경우 7000 개 이상의 테이블에서 해당 변경 사항을 반복해야합니다. 사용자 정의 데이터베이스 관리 스크립트를 작성하는 데 많은 시간을 할애하거나 인간이 똑같은 것을 수천 번 반복하도록합니다 (단단한 실수도 함).

0

사례 B가 훨씬 뛰어납니다. 사용자가 자동으로 증가하는 user_id 유형 필드를 갖고 있는지 확인하고 해당 ID를 통해 표를 함께 연결하십시오.

user_id email 
1000  hello 

당신이 권리를 찾을 때까지 테이블의 열을 검색하는 것이 경우 테이블 1000 년대의 검색 데이터의 특정 부분을 (선택하는 기능을 iclude 할 필요가 없기 때문에이 검색 속도를 향상시킬 수 당신이 특정 테이블 (예 : 메시지 만 필요함)을 검색하는 경우 조회에 1 개의 테이블 만 포함되며 모든 테이블을 훨씬 빠르고 쉽게 관리 할 수 ​​있습니다. 관리자 수준.

하지만, 심지어 더 나은 아이디어가 여러 열이 한 테이블이 될 것이라고는, 최신 하드웨어와 합리적인 조정으로 대부분의 경우

user_id email messages 
1000  hello hi 
+0

감사합니다. seanyt123 50000 명 이상의 사용자가있는 관리 시스템의 데이터베이스 구조에 대해 설명 할 수 있습니까? – as1992

+0

저장하려는 다른 데이터에 따라 달라집니다. – seanyt123

관련 문제