7

Sollte eine com.datastax.driver.core.PreparedStatement-Instanz ein Singleton in einer Anwendung sein?Datastax - Ist PreparedStatement threadsafe?

Wenn ja, was passiert, wenn die Verbindung unterbrochen wird? Wird das PreparedStatement ungültig und muss es manuell "neu vorbereitet" werden?

Ein einfaches Beispiel der Verwendung von PreparedStatement (anders als das Vorbereiten + Ausführen in der gleichen Methode) wäre brilliant!

Antwort

8

PreparedStatement-Objekte sind threadsafe. Sie können sie ändern (indem Sie beispielsweise die Standardkonsistenzstufe festlegen) auf eine Weise, die zu Inkonsistenzen führen kann, wenn mehrere Threads dies gleichzeitig tun, aber das ist noch etwas anderes.

Vorbereitete Anweisungen sind im Grunde Wrapper um eine ID und Metadaten, und der Server behält die vorbereitete Anweisung so lange wie sie ist (aber ein Knotenabsturz oder -neustart bedeutet, dass sie verloren ist und neu erstellt werden muss). Theoretisch könnte eine vorbereitete Anweisung irgendwo anders serialisiert und deserialisiert werden und funktionieren, aber ich würde es nicht empfehlen.

Vorbereitete Anweisungen sind lokal für einen Knoten und, wie ich bereits erwähnt habe, überstehen Neustarts nicht. Wenn Sie sie also beibehalten, müssen Sie sicherstellen, dass Sie sie bei Verbindungsfehlern oder beim Neustart von Knoten bereinigen. Ich würde versuchen, sie so zu skalieren, wie Sie Ihre Verbindungen definieren, sie auf Verbindungen neu erstellen und wiederherstellen. Vielleicht kein guter Rat, aber es hängt so sehr davon ab, wie Ihre Bewerbung strukturiert ist.

+0

Ich denke, vorbereitete Anweisungen sind nicht nur node-spezifische, sondern sie werden über Cassandra-Cluster geteilt. – pinkpanther