상위: Elasticsearch
요약
RDB 등 기존 시스템의 데이터를 Elasticsearch로 옮기는 과정입니다. 주로 Logstash를 사용합니다.
고려사항
- 정규화 vs 비정규화: RDB는 정규화된 테이블을 사용하지만, Elasticsearch는 검색 성능을 위해 비정규화된(Denormalized) 문서를 선호합니다. JOIN 비용을 줄이기 위함입니다.
- 데이터 타입 매핑: RDB의 컬럼 타입을 Elasticsearch의 필드 타입으로 적절히 변환해야 합니다.
타입 매핑 참고
| RDB 필드 타입 | Elasticsearch 필드 타입 |
|---|---|
| INT, BIGINT | long, integer |
| VARCHAR, TEXT | text, keyword |
| DATE | date |
| BOOLEAN | boolean |
| FLOAT | float, 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)를 사용하는 것이 좋습니다.