2016-12-22 2 views
2

mysql 또는 postgresql과 같은 SQL 데이터베이스가 있다고 가정 해보십시오. 사용자와 자동차라는 두 개의 테이블이 있습니다. 한 사용자는 N 대의 자동차를 운전할 수 있고 N 대의 사용자가 자동차를 운전할 수 있으므로 외래 키가 두 개인 세 번째 "드라이브"테이블이 있습니다.SQL과 elasticsearch 간의 올바른 실행

이제 테이블 사용자가 elasticsearch를 사용하기를 원합니다. 이름, 이메일 등으로 사용자를 검색하기를 원하기 때문입니다. 자동차 테이블에서 검색을해야 할 수도 있습니다.

1) SQL 데이터베이스를 포기 :

내가 이것을 달성하기 위해 세 가지 방법을 참조 I 디부 가장 좋은 방법이 무엇인지 알고 싶다. 모든 테이블은 이제 elasticsearch에 있습니다. 원하는 것을 검색 할 수 있지만 모든 제약 조건을 수동으로 처리해야합니다.

2) SQL 데이터베이스에 구조를 유지하고 세 개의 테이블, 기본 키 및 외래 키를 유지합니다. 그러나 귀하의 테이블에는 elasticsearch에 연관된 행의 elasticsearch ID 만 들어 있습니다. 예를 들어 테이블 사용자의 경우 user_id를 유지하고 이름, 전자 메일 등을 찾은 elasticsearch 행을 가리키는 user_elasticsearch_id를 추가합니다. 따라서 SQL 제약 조건이 있으므로 검색을 수행 할 수 있지만 유지 관리해야합니다 두 개의 테이블.

3) 중복. 당신은 당신의 SQL 데이터베이스를 건드리지 않는다. 당신은 elasticsearch 데이터베이스의 모든 행을 복제한다. 당신은 제약 조건을 가지고 있으며, 검색 할 수는 있지만 다시 두 테이블을 유지해야하며 데이터가 두 배, 저장 용량이 두 배가됩니다.

이제 stackoverflow의 용감한 동료,이 경우 어떻게 하시겠습니까?

감사합니다.

+1

이 답변은 도움이됩니다. http://stackoverflow.com/questions/36915428/how-to-setup-elasticsearch-index-structure-with-multiple-entity-bindings/36982705#36982705 및이 역시 도움이됩니다. http : //stackoverflow.com/questions/40410920/elasticsearch-usage-with-mysql/40415430#40415430 – Val

+0

감사합니다.이 글을 읽을 것입니다 :-) –

답변

1

DB와 응용 프로그램을 사용하여 비즈니스 규칙이 많이 혼합되어있을 수 있으므로 DB를 보존하고 보존하십시오. ES를 사용하여 검색하려는 사용자 속성을 색인화하십시오. ES는 득점 결과를 반환합니다. 결과를 선택하면 DB로 전환하여 모든 정보와 관계를 검색합니다.

그래서 2b : DB를 보관하고 DB에 ID가 아닌 ES에 PK를 저장하도록 선택합니다.

ID는 강제로 입력 할 수 있습니다. 그것은 "user_PK"또는 비슷하게 될 수 있습니다.

1

중요한 비즈니스 데이터의 가장 일반적인 설정은 예를 들어 SQL 데이터베이스를 기본 데이터 스토어로, Elasticsearch를 추가 검색 인덱스로 사용합니다. (= 귀하의 솔루션 3).

로그 등의 업무에 중요하지 않은 데이터의 대안으로 Elasticsearch가 독립 실행 형입니다.

해결책 2는 유선처럼 보이지만 나를위한 옵션이 아닙니다.

관련 문제