7

Un'istanza com.datastax.driver.core.PreparedStatement può essere un singleton in un'applicazione?Datastax - Is PreparedStatement threadsafe?

In tal caso, cosa succede se la connessione viene persa? Il PreparedStatement non è più valido e deve essere intrapresa un'azione manuale per "ripreparare"?

Un semplice esempio di utilizzo di PreparedStatement (diverso da preparazione + esecuzione nello stesso metodo) sarebbe fantastico!

risposta

8

Gli oggetti PreparedStatement sono thread-safe. Puoi mutarli (impostando il livello di coerenza predefinito per esempio) in modi che potrebbero portare a incongruenze se più thread lo facevano simultaneamente, ma questa è una cosa ancor più importante.

Le istruzioni preparate sono fondamentalmente wrapper attorno a un ID e metadati e il server manterrà l'istruzione preparata per tutto il tempo che è attivo (ma un arresto anomalo del nodo o riavvio significherà che è stato perso e deve essere ripreparato). In teoria una dichiarazione preparata può essere serializzata e deserializzata da qualche altra parte e funziona ancora, un po 'non la consiglierei.

Le istruzioni preparate sono locali a un nodo e, come ho già detto, non sopravvivono a riavvii, quindi se le manterrai intorno devi essere sicuro di pulirle quando le connessioni falliscono oi nodi si riavviano. Cercherò di esaminarli allo stesso modo in cui estensioni le connessioni, ricrearle su connessioni e ricollegamenti. Forse non un ottimo consiglio, ma dipende molto da come è strutturata la tua applicazione.

+0

Penso che le istruzioni preparate non siano solo specifiche del nodo, ma siano condivise tra i cluster di Cassandra. – pinkpanther

Problemi correlati