2011-09-15 3 views
2

많은 도시와 마을에서 초등 학교를 운영하는 NGO (Non Govt Org) 용 웹 응용 프로그램을 디자인하고 개발하는 작업이 주어졌습니다. 신청서에는 모든 학교, 학생, 자원 봉사자 및 모든 학교 교사를 기록 할 것입니다. 현재 NGO의 우산에는 약 30 개 학교가 있지만 매우 신속하게 수를 늘릴 매우 야심 찬 계획이 있습니다. Windows Azure에 응용 프로그램을 호스팅합니다. SQL Azure을 데이터베이스로 사용합니다. 이제 최소한의 지출로 데이터베이스를 설계하는 방법에 대한 까다로운 과제에 직면하고 있습니다 (NGO는 자선 단체 및 기부금으로 완전히 자금 지원을받습니다). SQL Azure의 데이터베이스는 5,10,20 ~ 50 GB와 같은 특정 크기로 제공되므로 각 데이터베이스의 최대 크기에 제한이 있습니다. 나는 다음과 같은 접근 방식을 가지고 왔습니다 :SQL Azure에서 확장 가능한 데이터베이스 설계시 도움이 필요합니다.

1) 모든 학교에 대해 5 또는 10GB 크기의 개별 데이터베이스를 생성하십시오. 각 데이터베이스에는 'student', 'subject', 'attendance'등과 같은 테이블이 있습니다.이 접근법의 문제점은 많은 데이터베이스를 만들어야한다는 것입니다. 모든 학교에 하나씩. 이것은 대폭 비용을 격추시킬 것입니다. 또한 처음에는 10GB 크기의 상당 부분이 활용률이 낮지 만 앞으로는 10GB가 학교 데이터 저장에 덜 적합 할 수도 있습니다.

2) 'school', 'student', 'attendance'등과 같은 테이블을 가진 하나의 데이터베이스를 유지하십시오. 이렇게하면 처음에는 비용이 낮지 만 데이터베이스가 가득 차기 시작하여 최대 한도에 도달 할 수 있습니다 더 많은 학교가 비정부기구에 의해 개설됨에 따라 50GB의 또한 '학생'및 특히 '출석'을위한 단일 테이블은 많은 양의 레코드를 가지며 쿼리를 느리게 만듭니다. 앞으로 다른 데이터베이스를 추가하더라도 여러 데이터베이스에 걸쳐 테이블을 분할하는 것이 얼마나 쉬운 지 알 수 있습니다.

한계를 염두에두고 더 이상 진행할 수 없습니다. 귀하의 제안이나 제안은 매우 유용 할 것입니다. 미리 감사드립니다.

편집 : 많은 사람들에게 감사드립니다. 내 질문에 대답했습니다. 나는 포인트를 얻었다. : 50GB는 거대한 공간이고 그것은 곧 채워지지 않을 것이다. 그러나 그것은 나에게 질문을 가져온다 : 학교의 수가 200, 300 또는 1000까지 자라나는 상황을 생각해 보라 !! 그렇다면 데이터베이스 디자인은 어떻게해야합니까? 나는 그 상황에서 50 GB가 크지 않을 것이라고 생각한다.

답변

1

저는 학교 시스템을 만드는 회사에서 일했었습니다. 대부분의 경우 50GB가 크지 만 일부는 훨씬 큰 데이터베이스가 있습니다. 일반적으로 리드 레코드와 같이 시간이 지남에 따라 추가 기능을 추가 할 경우 기록 레코드가 여기에서 일반적으로 문제가됩니다.

선형 샤드와 스케일 업 아키텍처라는 두 가지 시나리오를 설명했습니다. 선형 샤드는 학교 당 데이터베이스를 구현합니다. 스케일 업은 이들을 모두 동일한 데이터베이스에 저장합니다. SQL Azure와 함께 고려해야 할 추가 옵션이 있습니다. 다양한 확장 성 모델과 관련된 백서에 대한 내 BLOB 게시물을 참조하십시오. http://geekswithblogs.net/hroggero/archive/2010/12/23/multitenant-design-for-sql-azure-white-paper-available.aspx

또한 SQL Azure는 데이터 연합이라는 곧 출시 될 기능을 발표했습니다. 이것은 당신에게 가장 가능성이 높습니다. 다음은이 블로그 포스트는 관련 찾을 수 있습니다

http://geekswithblogs.net/hroggero/archive/2011/07/23/preparing-for-data-federation-in-sql-azure.aspx

http://geekswithblogs.net/hroggero/archive/2011/09/07/sharding-library-for-sql-azure-data-federation.aspx

마지막 링크는 오픈 소스 라이브러리에 대해 설명합니다, 나는 활용 개발자를 지원하기 위해 구축 오전, 엔조 파편이라고 SQL Azure Data Federation의 향후 기능 데이터 연합을 지원하는 버전은 베타 버전이며 페더레이션 멤버 (즉, 데이터베이스)에서 병렬 쿼리를 수행 할 수 있습니다. http://blogs.msdn.com/b/cbiyikoglu/ 요약

, SQL 애저의 확장 성 분야가 진화 : 마지막으로

는 더 세부 사항에서이 기능에 대해 설명합니다 (마이크로 소프트) Cihan에 의해 게시물을 놓치지 마세요. 그러나 많은 기능이 중요한 데이터 증가 및 성능 향상을 제공 할 것입니다.

1

50 기가 바이트는 엄청난 양의 데이터입니다. 학교 직원 및 출석은 매우 작은 문제입니다. 적절히 설계된 데이터베이스는 적어도 수십 년 동안 50 기가 바이트에 접근 할 것 같지 않습니다.

1

심지어 표준화 된 테스트 데이터를 추적하는 경우에도 60 개 학교에서 많은 데이터를 생성해서는 안됩니다. 학기당 6 학년에서 12 학년까지 중고등 학교 (미국을 참고 자료로 사용)가있는 경우, 학생 당 평균 6 개의 수업과 1000 명의 학생으로 분기 시스템에 24,000 개의 수업 기록 만있을 것입니다 년. 30 개 학교 모두가 중등 학교가되는 것은 아닙니다. 50GB는 충분해야합니다. 저는 미국에서 가장 큰 학군 중 하나 인 등록, 테스트, 학생 및 교사 정보가 담긴 데이터베이스와 협력했습니다. 7 년 이상 된 후 데이터베이스는 겨우 30GB에 거의 도달하지 못했습니다.

0

성장하는 크기에 대한 걱정없이 비용을 줄이려면 Azure Table Storage를 살펴 보시기 바랍니다. 당연히 "본질적으로 비 관계형"인 테이블 스토리지 용 응용 프로그램을 설계하는 것이 어려울 것입니다.

0

당신은 단지 이름과 몇 개의 다른 문자열/텍스트로 50GB를 치지 않을 것입니다. 동일한 데이터베이스에있는 모든 학교에서도 5GB로 잘 처리 할 수 ​​있습니다. 나는 더 복잡한 데이터 행을 수백만 줄었고 아무런 문제가 없었다면 50GB를 맞추지 못했습니다! :)

+0

답변보다 더 많은 코멘트입니다. – Horaciux

1

Azure SQL DB의 새로운 Elastic Scale 기능을 확인하십시오. 스케일 업하는 대신에.

관련 문제