2012-04-28 3 views
1

사용자가 게시물을 만들 수있는 앱을 만들고 다른 사용자가 이러한 게시물을 좋아하고 댓글을 달 수 있습니다.이 기능을 얻으려면 테이블을 사용하고 있습니다. 좋아요, 좋아요, 멘션 (parse.com 데이터베이스를 사용하여 저장하고 있습니다. 표).가장 인기있는 게시물을 얻는 방법은 무엇입니까?

게시물 ID, postOnWhichLikeWasMade, userWhoLiked (게시물 (postId)에 외래 키)와 같은 filelds 포함

좋아 dateOfPosting postId, 콘텐츠 userWhoMadeThePost 같은 필드, dateofLike

코멘트 ID, 콘텐츠 postOnWhichCommentWasMade을 (외래 키 to post (postId)), userWhoCommented, dateOfComment

가장 인기있는 게시물 (좋아요 및 댓글 수가 가장 많은 게시물)을 가져오고 싶습니다. 이 작업을 수행하는

  1. 첫 번째 방법은 포스트 전혀 계산하지 않으며 각 게시물에 대한 요청이 인기 게시물 구성되어 있지만 게시물의 수백만이있는 경우이 매우 시간이 소모 될 수 있습니다 때마다 때마다 좋아한다.
  2. 다른 방법은 'noOfLikes'와 'noOfComments'를 POSTS 테이블에 포함시키는 것입니다. 따라서 대중적인 게시물을 얻으려면 게시 테이블에만 액세스해야하지만이 접근법의 문제점은 사용자가 게시물에 코멘트를 작성한 후 POSTS 테이블에서 'noOfComments'를 증가시키고 COMMENTS 테이블에 항목을 작성해야합니다. POST 테이블에 증가분이 성공적으로 작성되고 COMMENTS 테이블 연결을 변경하기 전에 문제가 시작됩니다. . 이 경우 POST 및 COMMENTS 테이블에 잘못된 데이터가 표시됩니다.

어떻게 수행하나요?

답변

2

데이터베이스를 제어했지만, Parse와 함께이 일을하는 것은 당신이 (당신이 이미 언급 한 어느 하나) 두 가지 주요 문제가 있다는 것을 의미 경우는, 간단 할 것 : 지금까지 내가 말할 수있는

  1. 을 구문 분석에서는 쿼리에서 그룹화를 허용하지 않습니다. 즉, (귀하의 스키마로)을 모두 검색하지 않고 가장 많이 좋아하는/댓글이 달린 게시물을 얻는 것은 실제로 불가능합니다. 이는 실제로 (JOIN 및 GROUP BY를 사용하여) 표준 SQL 쿼리에서와 같이 좋아요/주석 수와 함께 새 열을 실제로 동적으로 추가 할 수 없기 때문입니다.
  2. 하나의 트랜잭션 내에서 둘 이상의 객체를 업데이트 할 수 없으므로 사용자가 주석을 추가 할 수 있지만 게시 객체의 주석 수가 변경되지 않을 가능성이 있습니다.

필자는 (적어도 구문 분석 사용을 주장한다면) 'noOfLikes'및 'noOfComments'열을 Post 개체에 추가해야한다고 생각합니다. N 최고 게시물을 검색 할 수있는 유일한 솔루션을 제공 할뿐만 아니라 불일치의 실제 위험도가 낮습니다. 네트워크 (또는 기타) 예외를 항상 catch하고 임시로 업데이트 요청을 로컬에 저장 한 다음 나중에 다시 시도 할 수 있습니다.

관련 문제