2012-10-30 2 views
0

FB App을 작성했으며 더 많은 기능을 추가하고 더 사교적으로 만들고 싶습니다. 내가하려고하는 일 중 하나는 사용자 친구에 따라 쿼리 테이블 저장소이며 친구가 내 앱 내에서 비디오를 "본"여부를 알아내는 것입니다. FB에서 친구 ID를 얻을 수는 있지만 FB 사용자가 가질 수있는 최대 친구 수는 5000 명이므로 테이블 저장 장치에 내 쿼리를 구성하는 방법을 잘 모르겠습니다.Windows Azure Node.js SDK - 테이블 저장소를 효율적으로 쿼리하는 방법

var ts1 = azure.createTableService(config.storageAccount, config.storageAccessKey, config.tableHost); 
var query = azure.TableQuery 
    .select() 
    .from('hits') 
    .where('PartitionKey eq ?', '0') 

for (f in friends){ 
    query.or('UserID eq ?', friends[f].UserID); 
} 

ts1.queryEntities(query, function (err, result){ 
    etc ... 
} 

큰 검색어로 검색되었습니다.

제 질문은 Windows Azure 테이블 스토리지에 대해 이와 같은 쿼리를 수행 할 때 가장 효율적이고 비용 효율적인 (최소 테이블 스토리지 트랜잭션) 것인지 또는 더 나은 방법입니까?

+0

안녕 - 미안하지만 난 당신이 달성하기 위해 노력하고 정확히 이해하지 못한다. 당신은 (1) 비디오를 본 친구들의 '카운트'를 얻고 싶습니까? (2) 동영상을 본 친구 FB Id의 '목록'을 얻으시겠습니까? (3) '모든 친구'가 동영상을 보았는가? 나는 당신이하고 싶은 일에 따라 다른 디자인을 가질 수 있다고 생각합니다. 당신은 명확히 할 수 있습니까? –

답변

0

테이블 스토리지는 관계형 데이터베이스가 아니므로 SUM 등의 내장 함수의 저장 프로 시저의 성능을 활용할 수 없다는 것을 의미합니다. 즉, 서버 측 계산을 수행 할 수 없음을 의미합니다 단일 사용자에 대한 총 조회수를 계산하고 그 결과를 반환하는 것과 같습니다.

테이블 스토리지 대신 모든 데이터와 소비자 측 작업을 가져와야합니다. 다른 솔루션은 데이터를 복제하는 것입니다. 동영상, 시간 등의 정보로 각 조회수에 대한 기록을 보유하는 것이 좋습니다 ... 그러나 반면에 공유 카운터와 같은 각 사용자의 총 조회수를 포함하는 다른 표가 필요합니다.

그런 식으로 단일 사용자에 대한 총 조회수를 원하는 경우 값을 반복해서 다시 계산할 필요없이 값을 쿼리하기 만하면됩니다. 1 대신 2 개의 레코드를 쓸 것이지만, 읽기가 훨씬 빨라질 것입니다.

스티브 마르크스는 이것에 대해 좋은 입문 후 쓴 : Architecting Scalable Counters with Windows Azure

+0

안녕하세요 Sandrino, 답장을 보내 주셔서 감사합니다. 네, 당신의 주장을 잘 알고 있고, 페치와 쿼리를 줄이기 위해 물건을 계산하기위한 특정 테이블을 이미 구현했습니다. 나는 5000 명이 넘는 친구를 만나고 시스템에 일치하는 것이 있는지 여부를 묻는 질문을 테이블 스토리지에 묻는 방법에 대해서는 여전히 알지 못합니다. 나는 이것을 할 때마다해야 할 것인가? 그게 내가 진정으로 구하려고 노력하는 것입니다. –

관련 문제