2013-07-18 2 views
1

우리가 인덱스를 DB에 약 1000 만 기록이 있었다 그리고 우리는 우리가 SOLR 대신 DB에서 레코드를 얻어서 고성능의 혜택을보고있는로 이런 짓을했는지 다행입니다. 이 데이터는보고에 사용됩니다. SOLR 업데이트 지수

현재 우리는 인덱스에 평면 데이터를 유지하고 있습니다. 예를 들어 :

Itemid, Companyname, Username, Status 

예를 들어 항목의 상태 변화에서 판매에받은 즉시, 우리는 기록을 업데이트 할 SOLR API를 호출합니다. 모두 잘 작동하고 있습니다. 실시간으로 색인이 업데이트되고 보고서가 잘 작동합니다.

질문 1 : 이제 미래에 사용자가 회사 A에서 회사 B로 회사 이름을 업데이트했거나 Mike에서 Jimmy 사용자 이름으로 업데이트했습니다. 어떻게 처리할까요?

내 생각

  1. 이름 = 옛 이름

  2. 인덱스에서 회사와 사용자의 ID를 유지 만 SOLR 인덱스를 사용자와 기업 업데이트 이벤트를 수신 및 업데이트 이름 대신. 그리고 solr에서 레코드를 가져온 후에 db를 다시 치면 업데이트 된 이름을 얻습니다. 나는 모든 호출에 대한 상태 transistions에 대한 인덱스를 업데이트 할 SOLR 업데이 트를 호출하고이 주요 필드 인덱스에서 와서 그러한 필드

은 질문 2 DB 테이블에서 오는 혼합 된 접근 방식이 될 것입니다. 이제 더 좋은 방법이 있을까요? 미래에 성능이 저하되거나 상태 전환 빈도가 증가 할 경우 어떤 것도 누락 되었습니까?

질문 3 : 미래에는 색인이 생성되지 않은 보고서의 열이 하나 더 필요합니다. 그렇게하기위한 표준 수용 방식은 무엇입니까?

친절이에 전문가의 조언을 주시기 바랍니다 공유 할 수 있습니다.

답변

0

질문 1 : 미래라고 회사 B에 A 회사에서 회사 이름 업데이트 사용자를 할 수 있습니다, 아니면 마이크에서 지미 username을 지금에, 어떻게 우리는이 문제를 처리 할 생각인가?

동일한 사례가 있으며 솔로 데이터 가져 오기 처리기를 사용했습니다. DB 측에서는 LAST_MODIFIED 열을 추가했습니다. 행의 모든 ​​갱신에, DB가 자동으로 "지금"는 LAST_MODIFIED` 타임 스탬프를 변경했습니다. SOLR 측면에서

우리는 그와 같은 Data Import Request Handler를 호출하여 데이터 가져 오기 작업을 실행 :이 경우

http://solrhost:8888/solr/mycore/dataimport?command=full-import&clean=false&optimize=false 

은 데이터 가져 오기 요청 처리기는 LAST_MODIFIED에 where 절을 가진 DB 쿼리를 실행합니다. this을보십시오.이를 위해

은 당신이 당신의 Itemid

질문 2처럼, SOLR 상에 고유 ID를 정의하는 것이 중요하다 : 나는 상태를 호출 할 때마다 transistions을 인덱스를 업데이트 할 SOLR 업데이 트를 호출하고 있습니다. 이제 더 좋은 방법이 있을까요? 안녕 미래에 성능이 떨어지거나 상태 전환 빈도가 증가 할 때 빈도가 증가 했습니까?

질문 1 참조. 더 빠른 경우 대안이지만 확실하지 않습니다.

질문 3 : 미래의 요구 사항은 아직 인덱싱되지 않습니다 보고서에 하나 더 열을 보여 온다 말할 수 있습니다. 뭐하는 표준을 할 수있는 방법은?

나에게는입니다 : 새로운 필드를 추가하는 SOLR 다시 시작 SOLR 할 수 있습니다. 아마 모든 문서를 다시 색인 할 것입니다. 문서를 종료 할 때 추가 정보를 얻으려면 색인 다시 생성이 필요합니다.