2012-04-08 3 views
0

Windows Azure를 사용하여 모바일 소셜 네트워크 용 서버 백엔드를 구축 중입니다.Azure 테이블에서 비정규 화 채팅 메시지

나는이 세 기관이 있습니다

  1. 사용자 - SQL 애저
  2. 스레드 (다음 서로에게 메시지를 보낼 수 있습니다 2 사용자 관계의 종류)에 저장된 - SQL에 저장 푸른
  3. 메시지 - 푸른 표

내가 스레드 ID에 의해 분할 푸른 테이블의 메시지를 저장소로에 저장 나는 좋은 성능을 기대 채팅 할 때 (스레드와 메시지 보내기/읽기).

그러나 가장 최근의 스레드 목록 (recent = 가장 최근의 메시지 포함)을 사용자에게 제공 할 수 있어야합니다. 즉, 마지막 메시지 날짜까지 스레드를 표시해야합니다.

많은 테이블 파티션을 스캔하고 메시지를 찾는 것이 성능상 킬러가 될 것이므로 가장 최근의 스레드를 효율적으로 가져올 수 있도록 데이터를 다른 테이블 파티션으로 비정규 화해야합니다.

귀하의 경험에 기반한 전략이 무엇입니까?

답변

0

편집 :

하나 개의 메시지 ATS 테이블 유무 : 더 생각 후, 여기에 더 나은 제안 (내 생각)입니다. 이 테이블에는 전송 된 메시지와 수신 된 메시지의 두 가지 유형이 있습니다. 사용자가 메시지를 보낼 때마다 테이블에 "보낸 사람"으로 저장 한 다음 "받은 사람"(또는 해당 유형이라고 부르는 사람)으로 저장합니다. 다음으로

파티션 메시지 테이블에서 모든 메시지 : -에 PartitionKey (long.Max - Timestamp.Ticks) -

(사용자 아이디)는 ThreadId를 저장할 수 RowKey

으로 추가 속성, 보낸 편지함/차별화 편지 등

메시지가 두 번 삽입되지 않도록 보장하려면 대기열 및 작업자 역할을 사용하십시오.

이 구성표는 사용자가 모든 것을 분할합니다. 시간 범위 내에서 해당 사용자에게 /로부터 모든 메시지를 표시하고 항상 내림차순으로 표시 할 수 있습니다.

+0

안녕하세요,이게 렉과 답변에 감사드립니다! 솔루션에서 볼 수있는 문제는 사용자가 스레드에 메시지를 게시 할 때마다 스레드 테이블의 대화 타임 스탬프를 업데이트하기 위해 SQL Azure를 쿼리해야한다는 것입니다. Azure Tables를 사용하는 이점을 어느 정도 상쇄합니다 - 확장 성 ... –

+0

동의. 내 대답을 편집 중입니다 – Igorek

+0

Igorek, 답을 업데이트 해 주셔서 감사합니다. 그것을 바탕으로 나는 아주 비슷한 것을 구현했는데 잘 작동했다. 그러나 나는 당신이 FlorinDumitrescu (http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/6a745a22-540a-44d5-b426-d42dd8510da5)와 가진 토론을 발견했고 나의 이전의 "테이블들에 대해 혼란스러워했다. - 더 - 확장 성 "세계관. 그래서 나는 그것을 google에 가서 결국 그것에 관한 새로운 토론을 시작합니다 ... –

0

배치 프로세스 솔루션을 선택하는 것이 항상 해결 방법이며 메인 프레임과 같은 오래된 컴퓨팅을 생각 나게합니다. 온라인/실시간 시스템을 대체 할 수있는 것은 없습니다.

배치 솔루션을 선택하면 시스템이 출시 될 때 더 이상 쓸모 없게되며 앞으로 기술 혁신을 방지 할 수 있습니다.

Azure 데이터베이스가 쿼리하기에 너무 커지기 시작하면 페더레이션을 사용하는 것이 좋습니다. 기본적으로 데이터를 여러 데이터베이스로 분할하고 코드에서 호환 가능한 액세스 논리를 활용한다는 의미입니다. 이 데모 애플리케이션에보고하여

시작 : SQL Azure Federations Tutorial -- Entity Framework

+0

안녕하세요. 답변에 감사드립니다.귀하의 답변을 정확하게 이해한다면 기본적으로 Azure Tables는 쓸모 없으며 페더레이션을 사용하는 것이 좋습니다. –

+1

@Martin Šťáva, Azure 테이블은 쓸모 없지만 처리량 측면에서 그다지 확장 할 수 없습니다. 확장 성 한계는 [5000 회/초]입니다 (http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx).) Sql Azure Federations는 [훨씬 더] 갈 수 있습니다 (http://www.ducons.com/blog/benchmarking-throughput-and-scalability-on-sql-azure-federations). Azure Sql의 유연성과 높은 확장 성이 필요한 경우 Federations를 선택하십시오. 많은 양의 데이터를 저렴한 가격으로 저장하려면 Table Storage를 선택하십시오. –

+0

@FlorinDumitrescu, 답변을 주셔서 감사합니다. 매우 중요하다고 생각합니다. 여기에서 시작한 토론을 발견했습니다. http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/6a745a22-540a-44d5-b426-d42dd8510da5. 나는 azure 테이블 스토리지가 덜 확장 성이있는 것으로 보이고 scalability가 SQL Azure보다 큰 장점이라고 생각한다는 사실을 관리해야합니다. 이것이 Azure Tables에서 메시징을 기반으로하는 것이 당연한 것처럼 보였습니다. 이 주제에 대해 더 자세히 설명해 주시겠습니까? Microsoft에서이 답변을 얻었습니까? 감사! –

관련 문제