Je suis débutant dans NoSQL et Cassandara en particulier. En ce moment, faire un benchmarking avec Cassandra et expérimenter un débit d'écriture très lent. Comme il est dit, Cassandra peut effectuer des centaines de milliers d'insertions par seconde, mais je n'observe pas ceci: 1) quand j'envoie 100 000 insertions simultanément via 8 clients CQL, alors le débit est de ~ 14470 insertions par secondes. 2) lorsque je fais la même chose avec 8 clients Thrift, le débit est d'environ 16 300 insertions par seconde.Très lent écrit en Cassandra
Je pense que les performances de Cassandra peuvent être améliorées, mais je ne sais pas quoi accorder. S'il vous plaît jeter un oeil aux conditions d'essai ci-dessous et conseiller quelque chose. Je vous remercie.
Conditions d'essai:
1. groupe Cassandra est déployé sur trois machines, chaque machine a 8 cœurs Intel (R) Xeon (R) CPU E5420 @ 2.50GHz, RAM est de 16 Go, réseau la vitesse est de 1000Mb/s.
2. L'échantillon de données est *
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. est écrit journal de livraison le sur le disque dur local, les données sont écrites sur Luster.
4. Keyspace Description
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: []
Oui, j'utilise trois scripts Python simultanés pour écrire. Vous voulez dire la limitation? Ou je fais quelque chose de mal? – Evgeny
Si vous aviez 1 thread/processus faisant des actions séquentiellement, et que chaque action prenait 100 ms, vous ne pouviez faire que 10 opérations par seconde, et 2 threads pouvaient faire 20 opérations par seconde. En utilisant 3 threads, si vous voulez obtenir 100k opérations par seconde, chaque opération devrait se terminer en 0.03 ms. Ce manque de parallélisme côté client peut être votre limite. D'autres choses à vérifier sont la charge sur le serveur (à la fois disque et cpu). – sbridges