2017-08-07 4 views
0

Je suis en train d'insérer assez petite quantité de données en utilisant async phantom-cassandra 3:9 mais cette requête garde échoue: INSERT INTO test_db.test_tbl(name, last, ts) VALUES('aaa', 'bbb', 1502109409) IF NOT EXISTS USING TTL 0; Je reçois l'exception suivante:Obtenir WriteTimoutException sur les opérations CAS

com.datastax.driver .core.exceptions.WriteTimeoutException: délai d'attente Cassandra lors de la requête d'écriture à SERIAL de cohérence (1 réplique était nécessaire mais seulement 0 a reconnu l'écriture)

à com.dat astax.driver.core.exceptions.WriteTimeoutException.copy (WriteTimeoutException.java:100)

à com.datastax.driver.core.Responses $ Error.asException (Responses.java:134)

à com.datastax.driver.core.RequestHandler $ SpeculativeExecution.onSet (RequestHandler.java:507)

au com .....

Je courais avec cassandra docker. J'ai essayé de changer le cassandra.yaml write_request_timeout_in_ms: 20000 mais cela n'a pas fait beaucoup de différence.

MISE À JOUR: J'ai essayé de régler le niveau de cohérence à l'ONE (également essayé d'autres):

insert 
     .value(_.name, "aaa") 
     .value(_.last, uuid) 
     .value(_.ts, Random.long) 
     .ifNotExists() 
     .consistencyLevel_=(ConsistencyLevel.ONE) 

, mais l'exception montre encore « délai d'attente Cassandra lors de la requête d'écriture à la cohérence de série »

Répondre

0

Vous utilisez mot-clé IF NOT EXISTS, qui est un Lightweight transactions

Cassandra met en œuvre des opérations légères en élargissant le consensus Paxos protocole, qui est basé sur un algorithme basé sur le quorum. Les paxos s'assurent de la consistance linéarisable au prix de quatre allers-retours.

Cela ressemble à un coût élevé, peut-être trop élevé, si vous avez le rare cas d'une application qui exige que chaque opération soit linéarisable. Par conséquent, réservez des transactions allégées pour les situations où elles sont absolument nécessaires.

Source: https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

+0

en fait je suis en train d'insérer seulement 100-200 dossiers. – igx

+0

Le coût des transactions Lightweight est très élevé. Essayez la requête sans "IF NOT EXISTS" –