2009-10-01 3 views
0

다양한 응용 프로그램을 지원하는 SQL Server 2008 데이터베이스가 있습니다. 지금은 새 응용 프로그램의 개발을 시작하고 그 데이터베이스에서 하나의 테이블에 맞는 데이터가 필요합니다 (복제가 있지만).정말 빠른 단일 테이블 데이터베이스의 전략은 무엇입니까?

원하는 데이터를 6 개 열로보기 (몇 개의 내부 조인)로 추출 할 수 있습니다. 데이터 (약 600 만 레코드)를 빠르게 탐색해야하는 웹 응용 프로그램을 개발 중입니다. 따라서 SQL Server보기를 쿼리하거나 Lucene 또는 유사한 메커니즘 (BerkeleyDB?)으로 인덱싱 된 새롭고 업데이트 가능한 데이터베이스를 배포하는 것이 바람직한지 알고 싶습니다.

감사합니다.

답변

2

조회수가 빠르게 모든 사용자의 데이터에 액세스하지 않는 드 정규화 된 데이터의 효과적인 예는, 그들은 단지 쓰기 쿼리를 쉽게합니다. 즉,보기에서 데이터를 선택하는 것은보기를 구성하는 몇 개의 조인을 수행하는 것과 동일하며 6 백만 개의 레코드가 포함 된 테이블에 조인하는 데는 어느 정도 시간이 걸립니다.

질문은 무엇입니까, 속도를 높이시겠습니까? 복잡한 데이터 세트에서 빠르게 선택하려면 원하는 데이터가 포함 된 실제 테이블 (보기가 아님)을 작성하고 사전 설정된 간격으로 주 테이블에서 해당 테이블을 업데이트하십시오.

데이터가 지속적으로 수정되고 빠른 업데이트가 필요하고 선택 항목이 항상 최신 데이터를 반영하려면 테이블 구조를 최적화하는 것이 좋습니다. 조인을 제거 할 수 있는지 확인하십시오. 이는 데이터 복제 비용을 발생시킬 수 있습니다. 즉, 트랜잭션을 많이 사용해야합니다.

+0

음 ... 데이터가 매월 업데이트됩니다 ... 선택 만하면됩니다 ... 필요한 데이터가 포함 된 새 테이블 (2 또는 3) 세트를 만들어 업데이트해야한다고 생각합니다. 메인 데이터베이스가 업데이트되면? –

+1

그러나 일반적으로 올바른 것은 색인 된 보우에 대한 leonm의 코멘트를 참조하십시오. – Mark

+0

@Pedrolopes, splurge, do 5 or 6! 질문에서 지구상에 얼마나 많은 테이블을 가져야하는지 누군가 추천 할 수 있습니까? 당신은 제로 세부 사항을 제공합니다 –

0

Boyce-Codd Normal Forms에 익숙하십니까?

현재 인프라를 유지하려면 데이터를 단일 테이블로 제한하고 성능과 관련이 있습니다. 테이블에 열을 추가하고 해당 열에 정규화되지 않은 데이터를 저장하는 것이 좋습니다. 예를 들어

는 :

는 테이블, people했다 말해봐. 각 사람의 manager_idmanager과 동일한 테이블에있는 person에 연결됩니다. 얼마나 많은 사람들이 manager에 속하는지 추적하는 카운터를 저장 한 employees_count이라는 manager 열을 추가 할 수 있습니다.

이것은 간단하지만

0

정확한 데이터 구조를 알지 못하면 대답하기가 어려울 수 있습니다. SQL Server의 Indexed views은 이에 적합하며 성능 기준을 잘 충족시킬 수 있습니다.

보기에 대해 테스트 (아마도 JMeter jdbc로드 테스트)를 실행하는 것이 좋습니다. Lucene 또는 BerkeleyDB를 사용하여 추가 색인을 작성하는 경로를 거치기 전에 비교적 간단한 노력으로 가장 간단한 솔루션의 실행 가능성을 판단 할 수 있습니다.

+0

그것은 과도한 표준화 된 데이터 구조입니다 ...6 개의 테이블을 가지고있어서 가장 작은 작업이라도 2 또는 3 개의 조인을해야합니다. 그리고 약 3 천만 개의 항목이 있으며 그 중 일부만을 원합니다 (약 6 백만 개). 새로운 테이블 세트 및 성능 테스트 SQL Server Analysis Services는 나에게 훌륭한 결과를주었습니다 ... –

+0

처음에는 새 테이블/뷰를 사용하고 실제로 필요한 경우 다른 접근 방식으로 전환했습니다. 퍼포먼스가 당신의 필요를 충족시키는지를보기 위해 많은 테스트를 해보 았지만, 괜찮 으면 소리가납니다. Lucene 색인을 추가로 유지하면 고유 한 문제가 있습니다. 물건을 보관하는 것이 간단할수록 적절하게 확장 할 가능성이 높아집니다. – leonm

+0

표준화 된 구조가 거의없는 Pedrolopes. 종종 훨씬 많은 조인을 사용하여 더 큰 테이블을 쿼리해야하며 여전히 우수한 성능을 얻습니다. 인덱스가 올바르게 작성되어 있고 6 백만 레코드가 SQL Server 용 작은 데이터 세트 인 경우 2 ~ 3 개의 테이블에 합류하는 것이 본질적으로 잘못되었습니다. 표준 쿼리를 사용하면 좋은 성능을 쉽게 얻을 수 있습니다. 뷰는 뷰의 맨 위에 뷰를 쌓아두면 성능이 저하 될 수 있습니다. 인덱싱 된 뷰는 도움이 될 수 있지만 다른 뷰를 참조하지 않는 뷰에만 인덱싱 할 수 있습니다. 길을 가기 전에 길고 힘차게 생각하십시오! – HLGEM

관련 문제