지난 시간에 작업했던 config는 testtable에 있는 모든 데이터를 매번 불러와서 그걸 또 매번 엘라스틱서치의 test인덱스에 넣도록 설정돼 있었다. 이렇게하면 당연히 비효율적일 수 밖에 없다. 이번엔 처음 가져올땐 전체를 가져오지만 그 이후에는 새롭게 등록되거나 수정된 데이터들만 가져와서 등록돼도록 config를 수정해보자.
statement=>"SELECT *, UNIX_TIMESTAMP(edit_date) AS unix_ts_in_secs FROM testtable WHERE (UNIX_TIMESTAMP(edit_date) > :sql_last_value AND edit_date < NOW()) ORDER BY edit_date ASC"}
여기서 중요한것은 tracking_column이다. 어떤 컬럼이 기준이 되느냐 하는 건데 아래에 있는 쿼리문에도 들어가 있다. 그리고 그 컬럼은 숫자 타입이라는 것이다. 쿼리를 살펴보자.
statement=>"SELECT *, UNIX_TIMESTAMP(edit_date) AS unix_ts_in_secs FROM testtable WHERE (UNIX_TIMESTAMP(edit_date) > :sql_last_value AND edit_date < NOW()) ORDER BY edit_date ASC"}
테이블에 등록하거나 수정할때 항상edit_date의 값을 업데이트 해준다. 그리고 그 값을 "unix_ts_in_secs"에 넣어주었다. 그리고 그 저장된 값을 불러올때는 ":sql_last_value"로 불러온다.
쿼리문을 보면 알겠지만 마지막 edit_date의 시간 이후로 등록되거나 수정된 데이터들을 불러오라는 뜻이다.