2017-10-30 1 views
0

사용자가 사용 가능한 제품에 관심을 보여줄 수있는 전자 상거래 웹 사이트에서 작업하고 있으며이를 MySQL 테이블의 리드로 저장합니다. 이 리드 테이블은 수백만 개의 레코드로 구성되며 분당 8 레코드 씩 증가합니다. 다음과 같이 테이블 구조는 다음과 같습니다MySql과 ElasticSearch의 집계

LeadId | ProductId | UserId | RequestDate(DateTime) 

나는 단지 X 30 일 리드 할 수 있도록 요구 사항을 가지고있다. 따라서 데이터를 수집하여 지난 30 일 간 리드 수를 계산하고 이에 따라 사용자를 차단해야합니다. 나는 다음과 같은 접근 방식에 대한 제안이 필요합니다

  1. MySQL의 집계 쿼리를 : 나는 사용자 아이디 & RequestDate 필드에 인덱스를 추가하고 30 일 수를 얻을 수 있습니다.

  2. ElasticSearch 사용 :이 필드를 사용하여 문서를 만들고 그에 대한 집계를 실행할 수 있습니다.

  3. 요약표 : 매일 또는 시간 단위로 요약표를 만들고 계산 된 데이터를 얻습니다. 마지막 x 시간 단위의 데이터에 대해 집계를 구현하는 것은 복잡 할 수 있습니다.

접근 방식 2의 성능 이점과 접근 방식 1의 유지 관리 이점을보고 있습니다. 다음 중 내가 사용해야하는 접근 방법은 무엇입니까?

+1

팀의 기술과 경험에 가장 부합하는 솔루션을 사용해야합니다. –

+0

우리 팀은 elasticsearch와 mysql 기술 모두에서 동일한 경험을 가지고 있습니다. 이 양의 데이터 (약 1 천만)에 대해 탄성 검색을 사용해도 괜찮습니까? – ctor

답변

0

이전 리드를 30 일 이상 보관 파일 테이블로 이동하여 행 수를 줄입니다. 아카이브에 데이터를 복사 할 때마다 각 사용자에 대해 긍정적 인 카운터를 만들고 매일 늘립니다. 사용자가 리드를 추가하면이 값이 감소합니다. 카운터가 0이면이 사용자의 추가 리드를 추가 할 수 없습니다.