2011-10-28 6 views
1

저는 NoSQL과 Cassandara의 초보자입니다. 현재 Cassandra와 벤치마킹을하고 매우 느린 쓰기 처리량을 경험합니다.카산드라에서 매우 느린 글입니다.

Cassandra는 초당 수십만 개의 삽입을 수행 할 수 있습니다. 그러나 이것을 관찰하지는 않습니다. 1) 8 개의 CQL 클라이언트를 통해 동시에 100,000 개의 삽입을 보내면 처리량은 ~ 14470 개/인 초. 2) 8 대의 Thrift 클라이언트를 통해 동일한 작업을 수행 할 경우 처리량은 초당 ~ 16300 인서트입니다.

나는 카산드라 성능을 향상시킬 수 있다고 생각하지만, 무엇을 튜닝해야할지 모르겠다. 아래의 테스트 조건을 살펴보고 조언을 구하십시오. 고맙습니다.

테스트 조건 :

카산드라 클러스터는 세 개의 시스템에 배치 된 각 시스템은 8 개 코어 인텔 (R) 제온 (R) CPU를 E5420의 @의 2.50GHz를 가지고있다, RAM 16 기가 바이트, 네트워크입니다 (1) 속도는 1000Mb/s입니다.

2. 데이터 샘플

set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '1.0'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA1'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '47.1'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['volume'] = '300.0'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['se'] = '1'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '2.0'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA1'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '44.89'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['volume'] = '310.0'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['se'] = '1'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '3.0'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA2'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '0.35'; 

3. 커밋 로그 로컬 하드 드라이브를 기입 *이며, 데이터는 광택에 기입된다.

4. KEYSPACE 설명

Keyspace: MD: 
    Replication Strategy: org.apache.cassandra.locator.NetworkTopologyStrategy 
    Durable Writes: true 
    Options: [datacenter1:1] 
    Column Families: 
    ColumnFamily: MM 
     Key Validation Class: org.apache.cassandra.db.marshal.BytesType 
     Default column value validator: org.apache.cassandra.db.marshal.BytesType 
     Columns sorted by: org.apache.cassandra.db.marshal.BytesType 
     Row cache size/save period in seconds: 0.0/0 
     Key cache size/save period in seconds: 200000.0/14400 
     Memtable thresholds: 2.3249999999999997/1440/496 (millions of ops/minutes/MB) 
     GC grace seconds: 864000 
     Compaction min/max thresholds: 4/32 
     Read repair chance: 1.0 
     Replicate on write: true 
     Built indexes: [] 

답변

2

당신이 기록 할/프로세스를 8 개 스레드를 사용하고 있습니까? 각 쓰기에 0.5ms가 걸리면 8 스레드/프로세스는 초당 16,000 개의 쓰기 만 수행 할 수 있습니다.

+0

예, 필자는 동시에 3 개의 파이썬 스크립트를 쓰고 있습니다. 그게 한계 라고요? 아니면 뭔가 잘못하고있는거야? – Evgeny

+1

스레드/프로세스가 순차적으로 작업을 수행하고 각 작업에 100ms가 걸리면 초당 10 회의 작업 만 수행 할 수 있고 2 회의 스레드는 초당 20 회의 작업을 처리 할 수 ​​있습니다. 3 개의 스레드를 사용하여 초당 100k 작업을 얻으려면 각 작업을 0.03ms로 완료해야합니다. 이러한 클라이언트 측 병렬 처리의 부족은 사용자의 한계 일 수 있습니다. 검사 할 다른 것들은 서버의 부하 (디스크와 CPU 모두)입니다. – sbridges

2

특히 파이썬 클라이언트의 경우 전역 인터프리터 잠금 때문에 각 클라이언트를 스레드가 아닌 별도의 프로세스로 실행하면 성능이 향상 될 수 있습니다.

그런 다음 가능한 경우 여러 컴퓨터에 클라이언트를 분할 해보십시오.

또한 워크로드가 균등하게 분산되도록 클라이언트가 세 노드 모두에 연결되어 있는지 확인하십시오.

로컬 디스크가 아닌 Lustre에 데이터를 쓰는 것이 중요 할 수도 있지만 Lustre와의 경험이 없습니다.

+0

동의어, 큰 문제는 Lustre입니다 (Evgeny가 Cassandra 메일 링리스트에서 동일한 질문을했을 때 Adrian이 언급 한 것처럼 - http://www.mail-archive.com/[email protected]/msg18328.html) , 그리고 파이썬에서 3 노드 카산드라 클러스터를 최대한 활용하려면 여러 기계가 필요할 수도 있습니다. – jbellis