[SQL] 외부 데이터 소스에 MySQL 데이터베이스를 동기화하는 방법
SQL외부 데이터 소스에 MySQL 데이터베이스를 동기화하는 방법
나는 내가 ElasticSearch 지수 데이터를 유지하는 데 필요한 검색라는 MySQL 데이터베이스 테이블이 있습니다. 난 이미 ES의 인덱스 테이블에서 테이블을 수출했다,하지만 지금은 동기화 그렇지 않으면 검색이 매우 빠르게 오래된 될 것입니다 데이터를 유지해야합니다.
내가 생각할 수있는 유일한 방법은 테이블마다 X 분을 보낸 다음 마지막으로 가져온 무엇과 비교하는 것입니다. 테이블 10M 행에 대해 가지고 있는데 하루 종일 테이블 수출 5 분마다 수행되고 싶지 않기 때문에 이것은 가능하지 않습니다. 이것에 대한 좋은 해결책이 있을까요? 참고 난 단지 데이터베이스에 대한 읽기 액세스 할 수.
해결법
-
==============================
1.나는 JDBC 입력 플러그인과 elasticsearch 출력 플러그인 Logstash을 활용할 것이다. 이 솔루션의 전체 예를 도시 한 블로그 글이있다.
나는 JDBC 입력 플러그인과 elasticsearch 출력 플러그인 Logstash을 활용할 것이다. 이 솔루션의 전체 예를 도시 한 블로그 글이있다.
Logstash를 설치 한 후, 당신은 내가 이런 위에서 언급 한 플러그인으로 구성 파일을 만들 수 있습니다 :
input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb" jdbc_user => "user" jdbc_password => "1234" jdbc_validate_connection => true jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" schedule => "5m" statement => "SELECT * FROM search WHERE timestamp > :sql_last_value" } } output { elasticsearch { protocol => http index => "searches" document_type => "search" document_id => "%{uid}" host => "ES_NODE_HOST" } }
당신은 당신의 환경에 맞게 몇 가지 값을 변경해야 할 필요가 있지만, 이것은 당신이 무엇을해야하는지에 대한 문제없이 작동합니다.
쿼리가 실행되고 타임 스탬프 (변경 이름이 데이터와 일치하는 것을) 모든 검색 기록을 가져옵니다마다 5 분 마지막 쿼리 실행 된보다 최신. 선택된 기록은 ES_NODE_HOST에 당신의 Elasticsearch 서버에있는 검색 색인에 sinked됩니다. 이에 따라 인덱스 입력 이름을 변경뿐만 아니라뿐만 아니라 데이터와 일치하는 기본 키 필드 (즉, UID)의 이름으로해야합니다.
from https://stackoverflow.com/questions/33293965/how-to-sync-a-mysql-database-to-external-data-source by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 변환 한 날로부터 시대 - 오라클 (0) | 2020.07.19 |
---|---|
[SQL] SQLite는 데이터베이스로드 실패 - sqlite가 가진 문제는 명령문을 준비 - 아이폰 - 엑스 코드 4.3.1 (0) | 2020.07.19 |
[SQL] 내 SQL 코드에서 오류가 어디에 있습니까? (0) | 2020.07.19 |
[SQL] 레일과 PostgreSQL을 사용하여 발생으로 그룹화 된 목록을 반환 (0) | 2020.07.19 |
[SQL] 기능을 가진 두 개의 열을 반환하는 방법 (0) | 2020.07.19 |