2015-01-05 2 views
1

사용자가 많은 수의 링크를 가질 수있는 일대 다 관계를 만들려고합니다. 조직 버킷.Riak 2.0에서 링크 워킹을 구현하는 방법

나는 걸어서 결과를 돌려주고 싶습니다.

내가 https://github.com/megamsys/scaliak

어떤 도움을 linkwalking 지원하는 stackmob의 스칼라 드라이버를 업그레이드하고하는 것은 크게 감상 할 수있다. 공개 토론은 mapreduce 사용에 대해서 이야기합니다.

+0

감사합니다. 여기에서 답변을 찾았습니다. http://basho.com/link-walking-by-example/ – indykish

답변

4

링크 보행은 deprecated in the latest version of Riak이며 이후 버전에서는 제거 될 가능성이 큽니다. 따라서 Scala 드라이버를 업그레이드하기 위해 업그레이드하는 것은 의미가 없습니다.

진짜 질문은 여기 있습니다 - 어떻게 Riak에서 일대 다 관계를 모델링해야합니까? 읽기가 많거나 사용량이 많은 사용 사례가 있는지에 따라 두 가지 주요 접근 방식이 있습니다.

1 - 키

당신은 쉽게 검색을위한 별도의 객체로 링크/단체의 목록을 저장할 수의 나열로 링크. 예를 들어, 사용자는 /buckets/users/keys/user-id-123에 저장된 객체 내가있는 경우 : { id: "user-id-123", name: "Dmitri", ... }

그때 사용자가 /buckets/user-orgs/keys/user-id-123에에 (내가 사용자에 대한 자신의 회원 개체에 대해 동일한 키를 사용하고 통지를) 속한 조직을 저장할 수 있습니다 :

["organization-id-1", "organization-id-2", "organization-id-3"]

이 날의 질문에 응답 할 수 있습니다 "어떤 조직이 사용자가 속한 않습니다를?" 하나의 GET을 user-orgs 개체에 추가합니다 (선택적으로 ID를 사용하여 각 조직 개체를 가져 오는 멀티 가져 오기).

참고 : Riak 2.0 이상을 사용하는 경우 새로운 Riak Data Types (구체적으로는 sets 데이터 유형)을 사용하여 해당 ID 목록을 저장할 수 있습니다. (집합 데이터 형식은 분산 시스템에 적합한 방식으로 목록에서 요소를 추가/제거/가져 오는 작업의 API를 제공합니다.)

읽기 사용 빈도가 높은 경우 (링크 목록을 자주 읽지 만 자주 작성/업데이트되지 않는 경우)이 방법을 사용하십시오.

2 - (Secondary Indexes를 통해, 바람직하게는 드문 경우에, Riak Search SOLR 기반, 또는 통해)

다른 주요 방법은 인덱스를 사용하는 것입니다 링크/쿼리 검색 쿼리는 원 - 검색 to-many 연관 객체가 될 수 있습니다.당신이 /buckets/users/keys/user-id-123에 저장된 사용자 개체가 있다면 그래서 : { id: "user-id-123", name: "Dmitri", ... }

그런 다음 "회원 엔트리"는 search-enabled에 개체를 여러 개 삽입합니다 /buckets/user-orgs/을 (의미, 당신은 검색 색인을 생성하고 user-orgs 양동이와 연관 것) :

{user_id: "user-id-123", org_id: "organization-1"}

{user_id: "user-id-123", org_id: "organization-2"}

{user_id: "user-id-123", org_id: "organization-3"}

나중에 "사용자가 속한 조직은 무엇입니까?"라는 질문에 대답 할 수 있습니다. 예를 들어, "user-orgs에있는 모든 객체를 제공합니다. user_id과 같음"이라는 검색 쿼리를 실행하여 결과를 얻습니다.

덧붙여,이 같은 검색/회원 객체를 사용하면 당신은이 다 대다 관계를 모델링 할 수 있습니다 (의미, 당신은 는 질문에 대답 수 있습니다 "사용자가 조직 organization-id-1에 속해?").

첫 번째 전략에서와 같이 검색 쿼리가 단일 GET보다 비용이 많이 들기 때문에 읽기가 많은 유스 케이스가 아닌 경우 (멤버십 개체가 자주 업데이트 되나 자주 읽지는 않음), 또는 역 관계를 모델링해야 할 때 (많은 것을 다).

참고 :이/하지 사용지도를 수행 일대 다 관계를 모델링 감소하고, (어쨌든, 백엔드에 축소 /지도를 사용) 사용되지 않는 링크 걸어 ​​메커니즘을 사용하지 마십시오.

관련 문제