이전에 Riak을 사용하여 AciveModel 인터페이스를 노출하는 Ruby 클라이언트 리플을 사용하여 비슷한 작업을 수행했습니다. 그러나, 나는 그것을 (다른 사람들이 가지고있는 것처럼) 정말로 반대해야한다. 키/밸류 스토어 위에 무거운 ORM을 사용하면 속도가 빨라진다.
이제 Ripple을 건너 뛰고 Riak과 직접 대화하여 속도에 민감한 많은 작업을 수행합니다 (우리는 Erlang으로 이동하여 HTTP 인터페이스 대신 PBC를 사용하지만 다른 이야기 : D). 우리는 그것을한다 :
우리의 객체에서 우리는 리플 호환 형식으로 JSON 문서를 저장한다. 우리가 여전히 Ripple을 사용하는 것과 같은 몇 가지 요구 사항이 있지만 Ripple없이이 작업을 다시 수행하려면이 형식을 사용하는 것이 좋습니다.
Riak 링크를 사용하여 개체를 함께 조인하고 외래 키를 문서 자체에 저장하지 마십시오. 개체에 저장할 수있는 링크의 수에는 제한이 있으므로 사용자 개체에 너무 미칠 수 없습니다 (예 : 사용자 개체의 각 설명에 대한 링크 저장).
Ripple (및 Riak)은 인덱스를 지원하지 않으므로 자체 솔루션을 사용해야했습니다. 예를 들어 무작위로 생성 된 키가있는 사용자 객체를 '사용자'버킷에 'fen2nf4j9fecd'로 저장합니다. 'users'버킷의 객체에 대한 Riak 링크가있는 'users_index_by_username'버킷에 'tom'키가있는 객체를 저장합니다. 이렇게하면 사용자 이름이 'tom'인 사용자를 쉽게 찾을 수 있습니다.
key filtering을 살펴볼 수도 있습니다. 나는 아직 그걸 가지고 놀지 않았지만, 나는 꽤 잘 보이는 성능 수치를 보았다. Riak은 구현 방식에 따라 버킷의 키를 나열하지 않도록 Riak에주의해야합니다. Riak은 버킷의 키가 아닌 모든 키를 검색합니다.
Riak은 꽤 짐승이지만 일단 주위를 둘러 보면 머리가 좋아질 것입니다. 복제는 어려우며 '효과가 있습니다'.
제 연구에서 나는 많은 것을 깨닫게되었습니다. 나는 Riak Search를 알고 있지만 약간 베타 버전입니다. 나는 링크의 수에 대한 제한을 알지 못 했으므로 좋은 정보이다. 나는 우리 자신의 색인을 굴리는 것과 같은 실현에 도달했습니다. 잠재적 경쟁 조건을 피하는 방법을 알아 내려고 노력 중입니다. – btilly
헤더의 총 크기에 제한이 있기 때문에 HTTP 인터페이스를 사용하는 경우에만 링크 수의 제한이 발생한다고 생각합니다. 나는 100 % 아니에요. 또한 잘못된 제품에 대해 언급했으며, 필자는 riak search (편집)가 아닌 key filtering을 언급했습니다. –