중첩 된 주석 (중첩의 유일한 레벨, 예 : 페이스 북)을 찾기 위해 애 쓰고 있습니다.redis에서 1 레벨 중첩 주석을 구조화하는 방법은 무엇입니까?
중첩되지 않은 "의견"을 얻기 위해 정렬 된 세트를 사용했습니다. 점수를 타임 스탬프로 사용하고 멤버를 주석을 렌더링하는 데 필요한 모든 정보가 들어있는 json으로 인코딩 된 속성 집합으로 사용합니다.
zadd 'users:1:comments', 123456789, {body : 'hello'}
을 그리고 검색하면이만큼 간단하다 :
그래서 코멘트를 추가하면 다음과 같을 수
나는이에 확장을 시도한 중첩 된 주석을 지원하기 위해zrevrange 'users:1:comments', 0, 20
어떤 방식 으로든 두 가지 다른 방법에 대해 브레인 스토밍했는데 문제가 있습니다.
1)
,부모 코멘트
zadd 'users:1:comments', 123456789, {id : 1, body : 'hello'}
zadd 'comments:1:comments', 123456789, {id : 2, body : 'nested hello', comment_id : 123 }
에 comment_id 포인트는 다음과 같이겠습니까 속성 목록에 comment_id 추가 : 그것은 매김에 올 때이 방법
-hello
-nested hello
문제입니다. 댓글에 20 개의 중첩 된 댓글이 있고 처음 10 개의 댓글 만 표시하는 경우 중첩 된 트리가 자릅니다 (부모 댓글 + 9 개의 중첩 된 댓글이 검색됩니다)
2)
사용자의 피드 표시 할 때이 N + 1 레디 스 쿼리가 발생할 것입니다, 그러나This is a parent comment
zadd 'users:1:comments', 123456789, {id: 1, body : 'hello'}
this is a nested comment
zadd 'comments:1:comments' 123456789, {id: 2, body : 'nested hello'}
:
zrevrange 'users:1:comments', 0, 20
zrevrange 'comments:1:comments', 0, 20
zrevrange 'comments:2:comments', 0, 20
etc...
을 ... 아니
는 자신의 피드에 중첩 된 주석을 넣어 ~까지 중첩 된 주석은 아마도 범위로 선택되면 안된다는 것을 언급하십시오.
이상 적으로는 단일 redis 쿼리로 작업하는 것이 좋지만 데이터를 구조화하는 방법을 잘 모르겠습니다.
아이디어가 있으십니까?
원래 게시물 # 1에서 설명한 페이지 매김 문제를 해결하지는 않았습니까? – jsharpe