MySQL 클러스터 5.0.45버전을 사용하려고 합니다.(5.1버전은 버그가 많아서 포기)
그런데, 대용량 로그 데이터의 메모리가 50G를 넘어버립니다.
제 시스템의 최대메모리는 16G밖에 지원을 안합니다.
이런상황에서 별도의 다른 DB를 준비하지 않고 MySQL클러스터 내에서 50G의 데이타를 소화하는 방법 있을까요?
클러스터에서 replica 갯수에 따라 노드그룹이 만들어집니다.
클러스터에서는 같은 노드그룹에서는 같은 데이터를 가지지요. 그리고 전체 데이터는 노드그룹으로 파티셔닝됩니다.
결과적으로 50G의 데이터를 저장하기위해서는 하나의 replica가 가지는 메모리의 양보다 각 노드그룹이 가지는 메모리의 합이 중요합니다.
현재 16G 용량의 노드그룹(replica를 2로 하면 하나의 노드그룹은 2개의 서버가 필요)이 최소 4개 필요합니다. 그러면 데이터 노드 전체 서버수는 2*4 = 8 이되는거죠.
위의 예는 순수하게 메모리에 데이터를 적재할 때 시나리오입니다. 리플리카의 개수에 따라 필요한 서버의 수는 달라집니다.
서버 사용에 제약이 있다면 5.1 버전에서 지원하는 Disk based table을 사용하세요. 이경우 primary key와 인덱스 데이터만 메모리에 유지하고 나머지는 데이터 노드의 디스크에 저장가능합니다.
http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-nodes-groups.html
영우님 답변 정말 감사합니다.
데이타노드를 추가하면 이용할수 있는 메모리 사이즈도 증가하는 군요.
저는 병렬식으로 생각해서, 데이타노드를 몇대를 추가해도 이용할수 있는 메모리 사이즈는,
똑같은줄 알았는데,
파티션닝되는 거였군요.
감사합니다. 일단 최대의 문제가 해결되었습니다.
그런데, 퍼포먼스는 정말 안나오네요.
테스트페이지를 innodb에서 열면 3초에 끝나는데,
ndb의 경우는 6초에서 8초정도로 2배에서 3배정도 느리네요.
이건 원래 ndb가 느려서 그렇겠죠?