2009-05-11 3 views
5

테라 바이트 범위의 데이터 볼륨을 처리 할 수 ​​있고 고 가용성 (5 nine)을 가질 수있는 MySQL 데이터베이스를 제공하는 솔루션을 조사해야합니다. 각 데이터베이스 행에는 시간 소인 W 최대 30 개의 부동 소수점 값이있을 수 있습니다. 예상 워크로드는 최대 2500 인서트/초입니다. 검색어는 빈번하지는 않지만 단일 테이블 만 포함하더라도 커질 수 있습니다 (100Gb의 데이터 포함).MySQL 클러스터가 테라 바이트 데이터베이스를 처리 할 수 ​​있습니까?

나는 그들의 HA 제안 인 MySQL Cluster를보고 있습니다. 데이터의 양 때문에 디스크 기반 스토리지를 사용해야합니다. 현실적으로 타임 스탬프 만 메모리에 보관할 수 있으며 다른 모든 데이터는 디스크에 저장해야한다고 생각합니다.

누구든지이 규모의 데이터베이스에서 MySQL 클러스터를 사용 해본 경험이 있습니까? 그것은 심지어 실행 가능합니까? 디스크 기반 스토리지는 성능에 어떤 영향을 줍니까?

이 데이터 볼륨에 대해 원하는 가용성을 얻는 방법에 대한 다른 제안도 있습니다. 예를 들어 Sequoia과 같은 제 3 자 라이브러리를 사용하여 표준 MySQL 인스턴스의 클러스터링을 처리하는 것이 더 좋을까요? 아니면 MySQL 복제를 기반으로하는보다 직선적 인 솔루션입니까?

유일한 조건은 MySQL 기반 솔루션이어야한다는 것입니다. MySQL이 우리가 다루는 데이터를 가져 오는 가장 좋은 방법이라고 생각하지 않지만 어려운 요구 사항입니다.

+2

기술에 대해 쇼핑하는 경우 Google의 BigTable 기반 프로젝트를 고려해 볼 수 있습니다. Hadoop의 HBase 및 Hypertable은 흥미로운 프로젝트입니다. http://hadoop.apache.org/hbase/ 및 http://www.hypertable.org/ – Kekoa

+0

해당 질문은 serverfault.com에서 더 잘 질문 할 수 있습니다. – lothar

답변

2

속도를 높이면 처리 할 수 ​​있습니다. 크기가 현명하다면 질문은 데이터의 크기가 아니라 인덱스가 전체 메모리에 들어야하는 인덱스의 크기입니다.

더 나은 답변을 제공해 드리 겠지만 하이 엔드 데이터베이스 작업은 매우 업무 의존적입니다. 더 많은 도움이 될만한 데이터에 대해 더 많은 것을 알 필요가 있습니다.

+0

데이터베이스는 여러 위치에 대해 50Hz에서 수신 한 타임 스탬프 데이터 스트림을 저장하므로 2500 초당 삽입 수입니다. 스트림의 구성은 언제든지 변경 될 수 있으므로 가변 개수의 부동 소수점 값이있을 수 있습니다. 타임 스탬프는 기본 키가되며 인덱스가 있습니다. 타임 스탬프 열은 디스크의 나머지 데이터와 함께 메모리에 있다고 가정합니다. – Mark

+0

다음에는 일괄 처리를 삽입합니다. 하나의 삽입/클라이언트/여러 행에 대한 두 번째. 간단한 마스터 - 마스터 복제로 장애 복구가 가능하며 50 개의 인서트/초 부하를 쉽게 충족시킬 수 있습니다. 유일한 진짜 질문은 샘플을 잃어 버리지 않도록하는 것이 얼마나 중요한지와 서버 충돌에 대해 2 ~ 3 초 동안 손실 된 데이터를 처리 할 수 ​​있다고 생각합니다. 추가 힌트로 기본 키 이외의 인덱스가있는 경우 테이블을 분할하는 것이 유용 할 수 있습니다. 이러한 대규모 쿼리의 속도를 높이기 위해 데이터웨어 하우징 트릭이있을 수도 있습니다. –

+0

의견을 주셔서 감사합니다. 우리는 일괄 삽입이 갈 길이라고 생각했습니다. 나는 ndb_size.pl 스크립트를 사용하여 몇 가지 계산을했는데 인덱스의 크기에 관한 것이었다. 필요한 메모리로 인해 클러스터를 사용할 수 없습니다. 그러나 우리는 또한 오늘 데이터 손실의 일부가 OK라는 것을 배웠습니다. 그래서 말했듯이 이제는 간단한 복제를 사용하고 있습니다. – Mark

2

좋아요, 저는 이었습니다는 어려운 요구 사항 인 mySQL에 관한 부분을 읽었습니다.

그렇다면 2500pps/초, 희소 한 쿼리, 전체 데이터 세트 중 최대 10 %의 결과 집합을 가질 가능성이있는 쿼리, 어떤 관계형 데이터베이스 시스템이라도 막연하다.

(이것은 오래 전, 9600 보드 RS-422 라인 (또한 까다로운 요구 사항) 이상의 프로그램 데이터를 100 메가 바이트로드하는 데 어려움이 있었지만 오래 전에 프로젝트를 떠올리게합니다. 하드 요구 사항.)는 7kbytes/초 × 삼백초의 =의 300kbytes가 통신하는 것 같지 않았어요 사실.)

그런 다음에 대한 부분있다 "를 포함 최대 30 수레." 표현은 삽입물 당 샘플 수가 가변적이라는 것을 암시합니다. 이는 정규화 문제를 암시합니다. 그렇지 않으면 각 행을 30 개 항목으로 늘리고 NULL을 사용해야합니다.

그러나 모든 말로, 좋아요, 당신은 300Kbytes/sec와 2500 TPS에 대해 이야기하고 있습니다. (이것은 정말로 관련이없는 샘플의 순서라고 가정합니다.) 이 set of benchmarks은 적어도 가능성의 영역에서 벗어나지 않았 음을 나타냅니다.

+0

의견을 보내 주시고 저에게 새로운 단어를 가르쳐 주셔서 감사합니다! (pessimal) 가변 개수의 샘플을 처리하기 위해 우리는이 테이블이 너무 자주 변경되어서는 안 될 때마다 새로운 테이블을 생성 할 생각입니다. 그런 다음 일정 기간 동안 적절한 데이터 테이블을 찾을 수있는 조회 테이블을 갖게됩니다. – Mark

2

This article은 큰 MySQL 데이터베이스의 속도를 저하시킬 수있는 요소를 식별하는 데 정말로 도움이됩니다.

2

아마도 최대 절전 모드 샤드를 시험해보고 10 테라 바이트의 10 노드로 MySQL을 돌리면 5 테라 바이트를 처리 할 수 ​​있습니다.

관련 문제