0

SQL Azure에 대한 샤딩 개념은 현재 50GB DB 크기 제한을 극복하기 위해 권장되는 가장 좋은 옵션 중 하나입니다. 샤딩의 핵심 전략은 원자 단위라는 관련 레코드를 단일 샤드에 그룹화하여 응용 프로그램이 단일 SQL Azure 인스턴스 만 쿼리하여 데이터를 검색해야한다는 것입니다.SQL Azure 샤딩 및 소셜 네트워킹 응용 프로그램

그러나 Social networking Apps와 같은 응용 프로그램에서는 엔티티와 레코드의 상호 연결로 인해 단일 샤드의 원자 단위를 그룹화하는 것이 쉽지 않습니다. 그러한 시나리오에 기반한 권장 접근 방식은 무엇일까요?

또한 샤드 드 DB에서 어떤 기본 키를 테이블에 사용해야합니까? 큰 Int 또는 GUID. 나는 현재 BIGINT ID 열을 사용하지만 데이터가 어떤 이유로 합쳐 지려면 다른 샤드의 값 사이에 충돌로 인해 문제가 될 수 있습니다. 어떤 사람들은 GUID (UniqueIdentifier)를 권유한다고 들었지만 성능에 어떤 영향을 줄 수 있는지 조심합니다. 인덱싱 UniqueIdentifier 열이있는 온 프레미스 SQL 서버는 불가능합니다. UniqueIdentifier 열을 사용하는 경우 SQL Azure가 비슷한 전략을 구현하는 방법에 대해 궁금합니다.

답변

0

소셜 네트워킹 앱의 경우, 전두에 SQL을 사용하지 않고 대신 MongoDB 또는 Azure Table Storage와 같은 noSQL 솔루션을 활용합니다. 비 정규화되었지만 비싸지 않은 시스템을 사용하면 다양한 인덱싱 요구에 맞게 사용자 정의 된 여러 엔터티 데이터 집합을 만들 수 있습니다. 그래서 그 대신 같은 데의

... 사용자 1 - < relationshiptable - < 사용자 2

대신 사용자 같은 테이블이있을 것이다

사용자 1의 친구 사용자 2의 친구

사용자 1, 2 인 경우 두 친구, 그럼 당신은 그 관계를 정의하는 두 가지 항목을 가지게됩니다. 그러나 특정 사용자의 친구 목록을 검색하는 것이 사소한 경우. 동시에 여러 개의 인덱스 테이블을 한 번에 검색하여 작업을 병렬로 실행하는 데 도움이됩니다.

이 프로세스는 매우 잘 확장되지만 관계가 유지되는 방법에 더 많은 시간을 투자해야합니다. 틀림없이 이것은 simiplied 예입니다. 전체 사용자 기반을 검색하는 등의 작업을 시작할 때 상황이 훨씬 복잡해집니다.

+0

나는 NOSQL 기반 옵션과 심지어 Azure 테이블 스토리지를 알고 있지만 이것은 dev 시간을 상당히 늘릴 것이므로 지금은 관계형 데이터베이스 접근 방식을 고수하고있다. – Azwaan

+0

그러면 RBDMS를 다른 곳 (Amazon, Rackspace 등)에서 호스팅 할 수 있습니다. 이렇게하면 더 강력한 VM에서 더 큰 DB를 처리 할 수 ​​있습니다. 캐시 계층에 넣기 만하면 비용을 제어하고 성능을 향상시키는 데 도움이됩니다. 개인적으로는 여전히 noSQL 경로를 살펴볼 것입니다. 장기적으로 최상의 솔루션이 될 것입니다. SQL Azure의 인덱스와 Azure 저장소의 데이터는 혼합 된 방식으로 만 수행됩니다. – BrentDaCodeMonkey

+0

Azure에서 실행중인 NOSQL DB를 사용한다고 가정하면 Neo4J 또는 Sne GraphDB와 같은 Windows DB 스토리지에 대한 Graph DB의 평가는 어떻습니까? – Azwaan

관련 문제