2014-12-25 1 views
0

solr에 의해 인덱싱되는 객체를 업데이트 할 때 riak와 solr 사이에 일관성없는 상태가됩니다. solr에 대한 업데이트가 완료되어 클러스터의 일관성을 보장 할 수있을 때 게시 커밋 후크를 만들어 알림을받을 수 있습니까? 아니면 좀 더 생각해야합니까? 최종 일관성을 처리하는 영리한 방법이 있습니까?riak 2.0을 사용하면 solr 업데이트로 객체 업데이트를 원할하게 할 수 있습니까?

여기 재현 문제를 설명하는 단계는 다음과 같습니다 Riak 2.0 이상에서 요코즈나 검색을 사용

curl localhost:8098/buckets/bucket/keys/3eaVbY3BWgIN3BFv4riEc6cAqPk -d'{ "key":"3eaVbY3BWgIN3BFv4riEc6cAqPk" }' -H 'Content-Type: application/json' 
curl -i -XDELETE localhost:8098/buckets/bucket/keys/3eaVbY3BWgIN3BFv4riEc6cAqPk && curl 'localhost:8098/search/query/index_name?q=key:3eaVbY3BWgIN3BFv4riEc6cAqPk&wt=json' 

HTTP/1.1 204 No Content 
Vary: Accept-Encoding 
Server: MochiWeb/1.1 WebMachine/1.10.5 (jokes are better explained) 
Date: Mon, 29 Dec 2014 21:31:58 GMT 
Content-Type: application/json 
Content-Length: 0 

{"responseHeader":{"status":0,"QTime":6,"params":{"q":"key:3eaVbY3BWgIN3BFv4riEc6cAqPk","shards":"127.0.0.1:8093/internal_solr/index_name","127.0.0.1:8093":"(_yz_pn:62 AND (_yz_fpn:62)) OR _yz_pn:61 OR _yz_pn:58 OR _yz_pn:55 OR _yz_pn:52 OR _yz_pn:49 OR _yz_pn:46 OR _yz_pn:43 OR _yz_pn:40 OR _yz_pn:37 OR _yz_pn:34 OR _yz_pn:31 OR _yz_pn:28 OR _yz_pn:25 OR _yz_pn:22 OR _yz_pn:19 OR _yz_pn:16 OR _yz_pn:13 OR _yz_pn:10 OR _yz_pn:7 OR _yz_pn:4 OR _yz_pn:1","wt":"json"}}, 
    "response":{ 
     "numFound":1,"start":0,"maxScore":2.9095426,"docs":[    
      { 
       "key":"3eaVbY3BWgIN3BFv4riEc6cAqPk", 
       "_yz_id":"1*default*index_name*3eaVbY3BWgIN3BFv4riEc6cAqPk*4", 
       "_yz_rk":"3eaVbY3BWgIN3BFv4riEc6cAqPk", 
       "_yz_rt":"default", 
       "_yz_rb":"index_name" 
      } 
     ] 
     } 
    } 
+0

riak보다 늦은 업데이트로 불일치가 발생 했습니까? 나는 솔직히 precommit 후크를 통해 업데이트되었다고 생각했는데, 즉 riak가 업데이트되기 전에 클라이언트가 put에 대한 성공 응답을 받기 전에 불일치가 해결 될 것입니다. – Joe

+0

@Joe는 의견에 감사드립니다. 그것은 사실 일지 모르지만 나는 여전히 궁극적 인 일관성 문제를보고 있습니다. 나는 내 질문을 너무 잘 말하지 않았으므로 도움이 될만한 모범을 보였다. 재현 할 수 없다면 알려주세요. – Matt

답변

3

, 검색 인덱스는 riak_kv_vnode 모듈 here으로 업데이트됩니다. 즉, 인덱스 함수는 레거시 검색과 같이 사전 커밋 (precommit) 후크를 통해 호출되지 않고 대신 put 프로세스가 백엔드에 저장할 객체를 전달한 후 (즉, 응답이 클라이언트로 전송 된 후) 비동기 적으로 호출됩니다.

색인을 생성하는 코드는 here입니다. 나는 소스에서 모듈을 컴파일 할 필요없이 알림 이벤트 나 후크를 허용 할 곳이 보이지 않는다.

인덱스 프로세스가 다소 빨리 끝나기를 기대하지만, kv로 업데이트되는 개체와 검색 인덱스에 나타나는 해당 업데이트 사이에 수십 초 정도의 시간이 소요될 수 있습니다.

관련 문제