2014-11-26 1 views
0

나는 청크 객체 저장소로 카산드라를 사용하고 있습니다.카산드라에서 불변의 바이트 청크를 저장하고 검색하는 가장 좋은 방법

복제 인수 3을 사용합니다. CL_ONE으로 청크를 작성한 다음 쓰기가 완료되면 CL_ONE으로 읽습니다.

청크가 불변이므로 불필요한 데이터를 읽을 위험이 없습니다.

그러나 NotFoundException을 실행할 수 있습니다. 하나를 작성한 직후에 청크를 읽으려고 할 때 모든 복제본에 아직 청크가 없을 수 있기 때문입니다. 나는이 문제를 해결하기 위해 노력했다 무엇

: 복제본이 덩어리가 될 때까지

  • 가 CL_ONE에서 읽기를 다시 시도합니다. 몇 분이 걸릴지 모르지만 몇 분이 걸릴 수 있습니다.

  • 이제 CL_ONE을 사용하여 읽기를 한 번 시도한 다음 실패하면 CL_ALL로 다시 시도합니다. 내가 처음 쓰기가 완료된 후에 만 ​​읽기 때문에, 나는 그것이 측면에서 (이 최선의 방법입니다,

내 질문은 청크에 대한 모든 복제본을 묻는 비용으로, 모든 경우에 응답을 받아야합니다 Cassandra에서 불변 인 덩어리의 읽기/쓰기를 관리 할 수 ​​있습니까? 사전에

감사합니다,

앙투안

답변

0

나는 나는 당신이하고있는도 당신이 올바른 방법으로 카산드라를 사용하고있는 이해도 확인합니다.

당신의 목표는 쓰기와 사이의 일관성을 유지하는 경우 다음 당신은

쓰기 CL + 읽기 CL> RF에게

disequation을 존중해야 다음 읽어 보시기 바랍니다. 이를 달성하는 가장 안전한 방법은 쓰기 및 읽기에 쿼럼을 사용하는 것입니다 (쿼럼은 RF = 3 일 때 2이므로 2 + 2> 3) - 아마도 가장 빠른 방법은 모두 쓰고 하나를 읽는 것입니다.

+0

ChunkedObjectStore에 Netflix 레서피를 사용하고 있습니다. 당연히 나는 당신의 문제를 사용할 수 있지만 그때 청크는 불변이므로 동일한 청크를 여러 번 가져 오는 것이 대부분이기 때문에 성능 문제가 있습니다. 최대 성능을 위해 CL_ONE을 읽고 쓰고, 청크가 방금 작성되고 아직 복제되지 않은 경우에만 발생하는 오류를 찾지 못한 경우에는 다시 시도해야합니다. 내 문제를 조금 더 잘 이해 하셨기를 바랍니다. – lambdacalculus

관련 문제