2014-12-07 5 views
0

나는 100 개가 넘는 테이블을 가지고있는 MySQL 데이터베이스를 가지고있다. 이 데이터베이스는 CMS에서 사용되며 매 6 시간마다 PHP 스크립트는 많은 로직, 계산 및 SQL 조인을 사용하여이 모든 테이블을 사용하고 1 백만 개가 넘는 행이있는 대형 데이터 세트를 생성하고이를 "거래"라고하는 테이블에 삽입합니다 ". 이것은 기본적으로 50 열이있는 테이블과 최적화 된 인덱스를 많이이며, 각 행은 같은 물건, 같은 것을 가지고elasticsearch에 적합한 사용법입니까?

dealid, 가격, PRODUCTNAME, productcolor, productdimensions, onstock, 브랜드 등

을 이 "거래"테이블은 모든 목적을 위해 많은 프론트 엔드 및 백엔드 어플리케이션에서 사용됩니다. 예를 들면 다음과 같습니다. 고객이 필터링하여 결과를 볼 수있는 페이지. 고객이 거래에 대한 정보를 찾을 수있는 페이지입니다. 브랜드 X의 모든 제품을 포함하는 계열사에서 사용하는 XML 피드 (1,000,000 개의 행 테이블에서 +/- 150,000 개의 행). iPhone에 사용할 수있는 액세서리의 종류를 표시하는 데 사용되는 iOS 앱입니다. 이러한 모든 응용 프로그램은 동일한 1,000,000 행의 MySQL 테이블을 사용하여 데이터를 쉽게 찾고 표시합니다.

"거래"테이블이 커짐에 따라 이러한 응용 프로그램의 속도 문제가 발생합니다. MySQL은 이러한 종류의 숫자를 처리하는 데 많은 어려움을 겪고있는 것 같습니다. 아마도 그럴 것이라고는 생각하지 않지만 아마도 32GB RAM과 8 코어를 가진 단 하나의 MySQL 서버 만 있으면 문제가 될 것입니다. 128GB RAM을 갖춘 몇 대의 서버로 업그레이드하는 것은 옵션이 아니며, 실제로 이것이 실제로 문제를 해결할 것이라고 확신하지는 않습니다.

나는 MySQL에 1,000,000 개의 행을 삽입하는 것 외에도 elasticsearch에 색인을 붙이는 PHP 스크립트를 만들었습니다. 그런 다음 간단한 샌드 박스 필터링 응용 프로그램에서 MySQL 테이블과 ES 인덱스를 테스트했습니다. ES 기반 애플리케이션의 속도는 MySQL 기반 애플리케이션에 비해 놀랍습니다. 따라서 속도면에서는 ES가 유리합니다.

그래서 .. 이것이 바로 ES 인스턴스의 올바른 사용법입니까? 아니면 ES가 MySQL 속도 문제를 해결하는 가장 좋은 솔루션이 될 것이라고 생각하는 것입니까?

답변

0

예 - ES가 요구 사항에 적합 할 것 같습니다. ES는 매우 확장 성이 뛰어나고 매우 빠릅니다. 1 백만 행이 쉬워야합니다.

메모리 사용, 보안, 트랜잭션 성을 감시해야합니다.

하지만 MySQL 데이터베이스를 기본 데이터 소스로 유지하는 것이 좋습니다.

+0

메모리 사용 : 내가하는 일을 고려하면 ES에서 이것이 가능한 문제입니까? –

+0

- 1 백만은 많지는 않지만 문서 크기와 쿼리 유형에 따라 다릅니다. 이제 제대로 작동한다면 잘 감시해야합니다. –