전체 그래프
Elasticsearch

Migration

data-engineeringelasticsearchmigrationlogstash

상위: Elasticsearch

요약

RDB 등 기존 시스템의 데이터를 Elasticsearch로 옮기는 과정입니다. 주로 Logstash를 사용합니다.

고려사항

  • 정규화 vs 비정규화: RDB는 정규화된 테이블을 사용하지만, Elasticsearch는 검색 성능을 위해 비정규화된(Denormalized) 문서를 선호합니다. JOIN 비용을 줄이기 위함입니다.
  • 데이터 타입 매핑: RDB의 컬럼 타입을 Elasticsearch의 필드 타입으로 적절히 변환해야 합니다.

타입 매핑 참고

RDB 필드 타입Elasticsearch 필드 타입
INT, BIGINTlong, integer
VARCHAR, TEXTtext, keyword
DATEdate
BOOLEANboolean
FLOATfloat, double

Logstash JDBC Input

Logstash의 JDBC Input 플러그인을 사용하여 RDB 데이터를 주기적으로 조회하고 Elasticsearch로 전송할 수 있습니다.

설정 예시

input {
  jdbc {
    jdbc_connection_string => "jdbc:postgresql://..."
    statement => "SELECT * FROM orders WHERE updated_at > :sql_last_value"
    schedule => "* * * * *"
  }
}
output {
  elasticsearch {
    index => "orders"
    document_id => "%{order_id}"
  }
}

실시간 동기화 (CDC)

Logstash는 폴링(Polling) 방식이므로 실시간성이 떨어질 수 있습니다. 실시간 동기화가 필요하면 CDC(Change Data Capture) 도구(예: Debezium)를 사용하는 것이 좋습니다.