Cassandra的Session會話

TigerJin發表於2021-09-09

前言

驅動程式採用的是

com.datastax.cassandracassandra-driver-core3.5.0

預設建立

預設情況下,session是沒有指向任何的keyspace。當我們在查詢的時候需要指定keyspace字首

Session session = cluster.connect();
ResultSet rs = session.execute("select release_version from system.local"); 

這裡就指定keyspace為system,查詢的表為local

指定keyspace建立

還有一種方法在建立session時指定keyspace,如下

Session session = cluster.connect("system");
ResultSet rs = session.execute("select release_version from local"); 
session.execute("select * from otherKeyspace.otherTable where id = 1");

在建立session的時候指定了keyspace,然後在執行查詢語句的時候就可以不用寫字首。但是如果要查其他keyspace裡面的資料的時候就不得不帶上字首。

也許你想過動態的建立session,每個keyspace一個session,可以,demo如下:

Session session1 = cluster.connect("ks1");
Session session2 = cluster.connect("ks2");

這種方式不是不行,但是需要注意的是,連線池是在session級別上建立的,每建立一個session將會額外的消耗一部分系統資源。

而且,由官網介紹,在使用命名的session時,在某些情況可能會導致意外的執行緒阻塞問題。
如果採用的是全非同步模式,建議使用沒有keyspace的名稱空間。

注:如果使用use來改變keyspace,這將會改變session的預設的keyspace。那麼多如果是在多執行緒共享的情況下,某一個執行緒突然改變了keyspace,這將會導致其他執行緒出現問題

總結

透過上面的瞭解,建議採用單個session,不使用keyspace命名,在查詢的時候手動指定keyspace字首

關於內部類的詳細文章可以參考目錄 [smxknife's Java內部類]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2800578/,如需轉載,請註明出處,否則將追究法律責任。

相關文章