2012-04-05 3 views
1

많은 양의 데이터를 생성하여 디스크에 저장하는 시스템에서 작업하고 있습니다. 회사에서 이전에 개발 한 시스템은 일반 파일을 사용하여 데이터를 저장했지만 여러 이유로 인해 관리하기가 매우 어려워졌습니다.주로 쓰는 NoSQL 데이터베이스

저는 NoSQL 데이터베이스가 우리에게 좋은 해결책이라고 생각합니다. 우리가 저장하려고하는 것은 일반적으로 몇 가지 메타 데이터로 주석을 달아 문서 (일반적으로 약 100K이지만 때로는 훨씬 더 크거나 더 작을 수 있음)입니다. 쿼리 성능은 최우선 순위가 아닙니다. 우선 순위는 I/O가 가능한 한 적은 번거 로움이되도록 작성하는 것입니다. 데이터 생성 속도는 약 1Gbps이지만 향후 10Gbps (또는 그 이상)로 이동할 수도 있습니다.

내 다른 요구 사항은 (잘 문서화 된) C API의 가용성입니다. 나는 현재 MongoDB를 테스트 중이다. 이것은 좋은 선택입니까? 그렇지 않다면 어떤 다른 데이터베이스 시스템을 사용할 수 있습니까?

+0

'redis' 시도 http://redis.io/ – Baba

답변

2

데이터 생성 속도는 약 1Gbps입니다 ... 현재 MongoDB를 테스트 중입니다. 이것은 좋은 선택입니까?

확인을 위해 데이터 속도는 10 초당 ~ 1 기가 바이트입니다. 따라서 20 분마다 1TB 하드 드라이브를 채우고 있습니까?

MongoDB는 쓰기 속도가 매우 뛰어나지 만 RAM과 데이터 비율이 비교적 낮은 상황에서는 이상적으로 사용됩니다. 일부 데이터와 함께 을 최소한 주 인덱스로 유지하려고합니다.

제 경험상, 5-10GB의 데이터마다 약 1GB의 RAM이 필요합니다. 이 수치를 넘으면 읽기 성능이 크게 떨어집니다. 100GB의 데이터에 대해 1GB의 RAM을 확보하면 인덱스가 RAM에 들어가는 것을 막을 때 새로운 데이터를 추가하는 것조차 느려질 수 있습니다. 여기

큰 키는 다음과 같습니다

실행할와 MongoDB를이 쿼리를 실행 쉬운 방법을 않습니다 계획입니까 쿼리

?

귀하의 데이터는 매우 빠르게 기본적으로 모든 쿼리를 그냥 디스크에 갈 것입니다 충분한 공간을 차지할 것입니다. 매우 구체적인 인덱싱 및 샤딩 전략이 없으면 디스크 스캔 만하면됩니다.

또한 MongoDB는 압축을 지원하지 않습니다. 따라서 많은 디스크 공간을 사용하게 될 것입니다.

하지 않으면, 나는 어떤 다른 데이터베이스 시스템을 사용할 수 있습니까?

당신은 플랫 파일을 압축 간주 적이 있습니까? 또는 가능성이 큰 데이터지도/C가 핵심 요구 사항 인 경우

, 어쩌면 당신이 Tokyo/Kyoto Cabinet보고 싶어 (I는 하둡은 자바로 작성 알고 ) 하둡과 같은 시스템을 감소?


편집 : 자세한 내용은

MongoDB를 하지 않습니다 지원 전체 텍스트 검색. 그런 것들을 위해서 다른 도구 (Sphinx/Solr)를 봐야 할 것입니다.

큰 인덱스는 인덱스 사용 목적을 무효화합니다.

숫자에 따르면 10M 문서/20 분 또는 약 30M/시간을 씁니다. 각 문서는 인덱스 항목에 대해 약 16 바이트가 필요합니다. ObjectID의 경우 12 바이트 + 2GB 파일에 대한 포인터의 경우 4 바이트 + 파일 포인터 + 일부 채우기의 경우 1 바이트.

모든 색인 항목에 약 20 바이트가 필요하다고 가정하면 색인은 600MB/시간 또는 14.4GB/일로 증가하고 있습니다. 그리고 그것은 단지 기본값 인 _id입니다.

주 인덱스가 더 이상 RAM에 맞지 않아 성능이 크게 떨어지기 시작합니다. (이 문서는 MongoDB에 잘 설명되어 있습니다.

그래서 어떤 쿼리를 실행할지 결정하는 것이 중요합니다.

+0

디스크 공간에는 큰 제한이 없지만 RAM이 있습니다. 현재 시스템에는 48GB의 RAM이 있습니다. 10Gbps 이상으로 이동하면 더 많은 RAM을 확보 할 수 있습니다. 쿼리는 메타 데이터 또는 일종의 전체 텍스트 인덱스에서 실행됩니다 (MongoDB는 전체 텍스트 인덱싱을 지원합니까?). 데이터베이스의 최종 크기에 관해서는 2 개월의 데이터 (또는 그 이상)를 보유해야 할 수도 있습니다. 나는 도쿄/교토에 익숙하지 않다. 나는 그들에 대해 더 많이 읽을 필요가있다. – Elektito

+0

Nitpick : 1Gbps는 일반적으로 1 기가 바이트가 아니라 1 기가 바이트를 의미합니다. http://en.wikipedia.org/wiki/Gigabyte에서 "기가 바이트의 단위 기호는 GB 또는 GB이지만 Gb (소문자 b)는 아닙니다. 일반적으로 기가비트 용으로 사용됩니다. ") 여전히 매우 빠른 것처럼 보이지만, 금융 시장 데이터가이 비율로 전달 된 상황에서 일했습니다. –

+0

그건 그렇고, 5-10GB의 데이터마다 1GB의 RAM이 내게 끔찍한 소리처럼 들립니다. 왜 그렇게 높은 비율입니까? 내가 본 모든 지표는 훨씬 작은 비율입니다. 큰 색인은 색인을 사용하는 목적을 무효화합니다. – Elektito

2

Cassandra을 살펴보십시오. 쓰기를 실행하는 것은 읽기보다 훨씬 빠릅니다. 아마, 그게 당신이 찾고있는거야.

+0

내가 틀렸다면 정정 해주세요. 그러나 Cassandra는 많은 칼럼을 가지고있을 때 적합한 솔루션과 같은 BigTable이 아닙니까? 스키마가없는 데이터베이스로 작동합니까? 또한 Cassandra에서 사용할 수있는 C API가없는 것 같습니다. – Elektito

+1

@Homayoon 실제로, 카산드라는 도식이 아닙니다. Read http://www.datastax.com/solutions/schema-less-database 적어도 Thrift 트렁크에는 C glib 지원이 있습니다. 즉, Cassandra를위한 C 클라이언트를 만들 수 있습니다. 아직 잘 테스트되지 않은 것 같습니다. Cassandra 0.7을 지원하는 C++ 클라이언트도 시작했으나 이미 완료되었는지는 확실하지 않습니다. https://github.com/thobbs/Coroebus –

관련 문제