문제

수십억 개의 레코드가 포함된 데이터를 처리하기 위해 Ruby on Rails 또는 Merb로 작성된 애플리케이션에 대한 백엔드 솔루션을 찾고 있습니다.분산형 모델로 가야겠다는 생각이 들어서 지금 보니

H베이스 ~와 함께 하둡

카우치디비

내가 보기에 HBase 솔루션의 문제점 - Ruby 지원은 그다지 강력하지 않으며 Couchdb는 아직 1.0 버전에 도달하지 못했습니다.

그렇게 많은 양의 데이터에 무엇을 사용할 것인지 제안해주실 수 있나요?

데이터를 한 번에 30~40Mb 정도 빠르게 가져오려면 필요하지만 가져오기는 여러 단위로 이루어집니다.따라서 시간 데이터의 ~95%는 읽기 전용입니다.

도움이 되었습니까?

해결책

실제 데이터 사용량에 따라 MySQL 또는 Postgres는 올바른 하드웨어에서 수십억 개의 레코드를 처리할 수 있어야 합니다.특히 요청량이 많은 경우 이 두 데이터베이스 모두 여러 서버에 걸쳐 복제할 수 있습니다(그리고 읽기 복제는 설정하기가 매우 쉽습니다(여러 마스터/쓰기 복제에 비해).

Rails 또는 Merb와 함께 RDBMS를 사용하는 가장 큰 장점은 이러한 유형의 데이터베이스에 액세스하기 위한 모든 우수한 도구 지원에 액세스할 수 있다는 것입니다.

내 조언은 실제로 이러한 시스템 몇 개에서 데이터를 프로파일링하고 거기에서 가져오는 것입니다.

다른 팁

사람들이 사용한 다양한 솔루션이 있습니다. 내 경험상 그것은 실제로 테이블 당 깎아 지른 수의 행이 아니라 해당 데이터와 관련된 사용 패턴에 더 의존합니다.

예를 들어, "초당 몇 개의 인서트/업데이트가 발생하고 있습니다." 이와 같은 질문은 어떤 백엔드 데이터베이스 솔루션을 선택할 것인지에 대한 결정을 내릴 것입니다.

예를 들어 Google을 예로 들어보십시오 : 실제로 요구를 충족시키는 스토리지/검색 솔루션이 없었기 때문에 MAP/Reduce 모델을 기반으로 자체적으로 만들었습니다.

HBase 및 그러한 성격의 기타 프로젝트에 대한 경고(CouchDB에 대해서는 아무것도 모릅니다. -- 저는 생각하다 실제로는 DB가 아니며 키-값 저장소일 뿐입니다.)

  1. Hbase는 속도에 맞춰 조정되지 않았습니다.확장성을 위해 조정되었습니다.응답 속도가 문제가 되는 경우 이 경로를 적용하기 전에 몇 가지 개념 증명을 실행하세요.
  2. Hbase는 조인을 지원하지 않습니다.ActiveRecord를 사용하고 있고 둘 이상의 관계가 있는 경우..글쎄, 이것이 어디로 가는지 알 수 있습니다.

역시 Hadoop을 기반으로 구축된 Hive 프로젝트는 조인을 지원합니다.Pig도 마찬가지입니다(하지만 실제로는 SQL이 아닙니다).포인트 1은 두 가지 모두에 적용됩니다.이는 Rails에서 수행할 수 있는 처리 유형이 아닌 대규모 데이터 처리 작업을 위한 것입니다.

웹 앱의 확장성을 원하는 경우 기본적으로 작동하는 유일한 전략은 데이터를 분할하고 파티션이 격리되도록 최대한 많은 작업을 수행하는 것입니다(서로 통신할 필요 없음).Rails에서는 기본적으로 하나의 중앙 데이터베이스가 있다고 가정하기 때문에 이는 약간 까다롭습니다.약 1년 반 전에 이 문제를 살펴본 이후로 그 부분에 개선이 있었을 수도 있습니다.데이터를 분할할 수 있으면 수평으로 상당히 넓게 확장할 수 있습니다.단일 MySQL 시스템은 수백만 개의 행을 처리할 수 있습니다(PostgreSQL은 아마도 더 많은 수의 행으로 확장할 수 있지만 약간 느리게 작동할 수 있습니다).

작동하는 또 다른 전략은 모든 쓰기가 마스터에 의해 수행되고 읽기가 슬레이브(및 가능하면 마스터) 간에 공유되는 마스터-슬레이브 설정을 갖는 것입니다.분명히 이것은 상당히 신중하게 수행되어야 합니다!읽기/쓰기 비율이 높다고 가정하면 꽤 잘 확장될 수 있습니다.

귀하의 조직에 자금이 풍부하다면 Vertica, AsterData 및 Greenplum이 무엇을 제공하는지 확인하십시오.

백엔드는 데이터와 데이터에 액세스하는 방법에 따라 다릅니다.

그러나 ORM의 경우 DataMapper를 사용하고 사용자 정의 DataObjects 어댑터를 작성하여 선택한 백엔드를 얻을 수 있습니다.

1.0에있는 CouchDB가 어떤 일이 아닌지 잘 모르겠습니다. 나는 그것으로 약간의 테스트를하는 것이 좋습니다 (10 억 무작위 문서 만 생성). 구체적인 버전 번호가 없더라도 그렇게 할 것이라고 말하고 싶습니다.

CouchDB는 데이터 파티셔닝/샤드와 관련하여 많은 도움이 될 것입니다. 프로젝트에 적합한 것 같습니다. 특히 CouchDB 데이터베이스가 스키마가 없기 때문에 특히 데이터 형식이 변경 될 수 있습니다 (필드 추가 또는 제거). .

CouchDB에는 READ-HEAVE 앱을위한 많은 최적화가 있으며, 내 경험을 바탕으로 실제로 빛나는 곳입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top