我是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: 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: []
你是否使用8个线程/进程来做写?如果每次写需要0.5 ms,那么8个线程/进程每秒只能写16000次。
特别是对于python客户端,由于全局解释器锁,通过将每个客户端作为单独的进程而不是线程运行,您可能会看到更好的性能。
之后,如果可能的话,尝试将客户端拆分到多台机器上。
同时,确保您的客户端与所有三个节点都有联系,以便工作负载均匀分布。
将数据写入Lustre,而不是本地磁盘,可能是一个因素,但我没有使用Lustre的经验。