我是NoSQL和Cassandara的新手。目前正在与Cassandra进行一些基准测试,并且写入吞吐量非常慢。
据说,Cassandra每秒可以执行数十万次插入,但我没有注意到: 1)当我通过8个CQL客户端同时发送10万个插入时,吞吐量为每秒约14470个插入。 2)当我通过8个Thrift客户端执行相同操作时,吞吐量每秒约为16300次插入。
我认为Cassandra的表现可以得到改善,但我不知道该怎么调。请查看下面的测试条件并提供建议。谢谢。
测试条件:
1. Cassandra集群部署在三台机器上,每台机器有8核Intel(R)Xeon(R)CPU E5420 @ 2.50GHz,RAM为16GB,网络速度为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. 提交日志写在本地硬盘上,数据写在Lustre上。
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: []
答案 0 :(得分:2)
您是否使用8个线程/进程进行写操作?如果每次写入需要0.5 ms,那么8个线程/进程每秒只能执行16,000次写入。
答案 1 :(得分:2)
特别是对于python客户端,由于全局解释器锁定,您可以通过将每个客户端作为单独的进程而不是线程运行来看到更好的性能。
之后,尝试将客户端拆分到多台计算机上。
此外,请确保您的客户端正在联系所有三个节点,以便均匀分布工作负载。
将数据写入Lustre而非本地磁盘可能是一个因素,但我没有Lustre的经验。