2012-04-05 2 views
1

저는 정말 애호가입니다. 포부가 너무 커서, 내 데이터베이스를 만드는 올바른 방법을 찾아 내서 데이터베이스 변경이 클라이언트 리팩터링을 필요로하지 않고 빠르다고 생각하고 있습니다. 마치 일반적인 개발이나 DBA 용어를 잘 이해하지 못하는 것처럼 응답하십시오.MySQL 데이터베이스 디자인 관련 케이스, 열 또는 추가 테이블?

상황 : 나는 각 사용자가 평가 한 책의 수를 결정하려고했습니다.

-Overall rating (ratings table) 
-sub rating (ratings table) 
-tag (book_tags table) 
-list (book_lists table) 

*Related tables: users, tags, lists 

문제 을 : 나는 열에서 열 하위 등급 모든 등급 테이블에 두 개의 전체 등급, 각이 (추측은 다음 이있는 경우 내가 평가 책을 고려 이것은 나쁘다, 그러나 확실하지 않다). 대신에 등급 테이블 (12 행)과 등급 테이블의 각 행이 사용자에 대한 등급 유형 인 book_ratings 테이블을 가지고 있어야합니까?

-e.g. book_ratings: id | user_id | book_id | rating_id 

예라면, 어떤 50 만 책, 책 당 12 개 평가 유형, 10,000 명의 사용자 및 그 book_ratings 테이블에 50 억 행의 총이있는 경우 어떻게됩니까? 그것은 천천히 달릴 것입니까? 또 다른 고려 사항은 장래에 더 많은 하위 등급 유형을 추가 할 수 있다는 점인데, 부분적으로는 변경하는 것이 중요 할 수 있다고 생각하지만, 많은 작업이 있으므로 먼저 확인하고 싶습니다.

감사합니다.

답변

1

시스템을 사용 가능하고 확장 가능하도록 모델링해야합니다. 12 개의 평가 항목이 있으면 결과 등을 집계 할 때 많은 어려움을 겪을 수 있습니다.이 사이트에는 이러한 종류의 고통에 대한 사례가 많이 있습니다.

당신이 등을 추가 인덱스, 클러스터링, 데이터 분할에 의해 최적화 성장함에 따라

그러나 당신은 당신이 바로 당신이 어떤 "빅 데이터"솔루션을 고려하는 것이 좋습니다 대량의 데이터를해야 할 것 안다면 아마도 NoSQL 방식으로 진행하십시오 ..

+0

혹시 최적화에 관한 정보를 알려 주실 수 있습니까? 뭔가 적절한 기본? 다른 날 나는 다양한 쿼리에서 사용하는 모든 필드에 인덱스를 추가 할 때까지 정말 느려졌지만 어둠 속에서 방황하는 시각 장애인처럼 완료되었습니다. 이상적으로는 장기적으로 데이터베이스가 잘 작동하면 20 만 명의 사용자와 1 백만 권의 책을 보유하고 싶습니다 (Pipe dream, but hey :). 가능한 한 미리 계획하는 방법을 알고 싶습니다. –

+1

이러한 것들을 최적화하는 것은 약간의 흑인 예술입니다. 나는 MySQL에 익숙하지 않지만 SQL Server에서는 쿼리의 '실행 계획'을 표시 할 수 있습니다. 즉, 쿼리를 실행하기 위해 서버가 수행하는 작업의 세부 사항을 표시 할 수 있습니다. 이는 SQL Server의 경우 최적화에 매우 유용합니다. 심지어 어떤 색인을 추가해야하는지 직접적으로 제안합니다. MySQL과 비슷한 점이 있다고 가정합니다. – MiMo

1

네, 설명대로 구조를 바꿀 것입니다. 더 유연하고 올바른 (정규화 된) 것입니다.

각 사용자가 모든 책에 모든 등급을 부여하는 경우에만 50 억 개의 행 (실제로는 나쁠 것입니다.)은 거의 없을 것입니다. 대다수의 사용자가 아무런 평가를하지 않을 것이며 대다수의 책은 평점을받지 않을 것입니다.

관련 문제