나는 매일 다른 파티션에 타임 스탬프로 분할 된 테이블을 가지고있다.mysql 파티션 압축
매일 약 10 억 건의 이벤트가 수신됩니다. 각 이벤트에는 오브젝트로 태그가 지정되며, 비즈니스 로직은 오브젝트가 이벤트를 처리하기 위해 모든 이벤트를 필요로합니다. 따라서 시스템에는 객체 당 하나의 행 (하루에 수억 개의 행)이있는 큰 테이블이 있으며 이러한 이벤트는 '이벤트 버퍼'중간 텍스트로 연결됩니다.
개체 당 하나의 행이 실제로 잘 작동합니다. 비즈니스 논리 및보고 기능을 사용하기에 매우 빠르고 적합합니다. 옛날 옛적에 우리는 이벤트 테이블로 시작하여 대신 참여했으며, 너무 느립니다.
5 일 후에 더 이상 이벤트가 수신되지 않습니다. 이 시점에서 우리가 이벤트를 종료하지 않았다면 우리 시스템은 우리 자신의 '시간 초과 된'이벤트를 버퍼에 추가합니다.
객체에 대한 이벤트가 수신 될 때 우리는 비즈니스 로직을 많이하고있다, 우리가 "온라인"시스템은 5 일을 원하지만 객체가 더 최종 이벤트 등이없는 플래그 부울이
개체 이벤트의 경우보고 시스템은 1 년 가치가 필요합니다.
5 일 이상 된 파티션을 압축하려고합니다. 나는 이것을 유발하기 위해 크론 작업을 할 수있다.
현재 접근법은 다음과 같습니다. 온라인 테이블과 동일한 스키마와 파티셔닝이 있지만 row_format = compressed 인 다른 테이블이 있습니다. 그런 다음 매일이 테이블과 같은 새 테이블을 만들지 만 파티셔닝은하지 않습니다. 먼저 5 일 된 파티션을 스왑 아웃하기 위해 ALTER TABLE EXCHANGE PARTITION
입니다. 그런 다음이 테이블을 새 테이블에 삽입합니다.
현재 접근 방식에는 두 가지 문제가 있습니다. 1)보고 도구가 두 개의 개별 테이블을 스캔해야하고, 2) 개체가 주 테이블에 있지 않을 때 경쟁 조건이 있다는 것입니다.
개별 파티션의 경우 ALTER
row_format
이 가능합니까?
Thx. 배경을 추가했습니다. – Will
Sigh. 내 보고서에는 행당 개체 데이터가 필요합니다. 데이터는 하루에 수 GB를 사용하며 압축하면 크기가 커진 단일 상자에 1 년을 저장할 수 있습니다. 그러나 온라인 시스템이 구축하고있는 파티션을 압축하면 성능이 많이 떨어집니다. 따라서 파티션을 압축하는 두 세계의 장점을 원한다면 5 일이 넘기 때문에 다시 쓰지 않을 것입니다. 두 개 이상의 테이블이있는 즉시 사용자는 두 개 이상의 테이블을 쿼리해야합니다. 나는 뷰 조합을 생각했지만 임시 테이블은 그렇게 어렵게 만듭니다. – Will
더 많은 생각을 추가했습니다. –