DataStax驅動最成熟。
默認,驅動程序會使用第一個鏈接的節點做爲支持的版本協議。若是集羣存在高低版本的節點(好比升級場景),若是驅動先鏈接不一樣不一樣版本的節點,可能會出現不兼容。
驅動支持壓縮客戶端和cassandra節點之間的消息。目前支持2種壓縮算法:LZ4和SNAPPY。默認爲NONE,即不壓縮。能夠調用Cluster.Bilduer.withCompression()操做來覆蓋這個設置。
認證和加密
驅動可插拔實現com.datastax.driver.core.AuthProvider。好比支持PlainTextAuthProvider(明文用戶名密碼校驗)。服務器也能夠配置加密選項,驅動得對應支持。有個Scram的方案,能夠實現不傳遞用戶名密碼的方式實現用戶名密碼校驗。
一個Session會維護一個集羣的鏈接,有個鏈接池,鏈接全部的節點,開銷很大,因此要儘可能複用。默認每一個節點一個鏈接。CQL原生協議是異步的,容許每一個鏈接能夠有多個請求。v2協議同時有128個請求,v3和v4容許最多32768個請求。PoolingOption能夠設置向上或向下擴展鏈接數。同時有鏈接的緩存期,防止不斷地創建和撤銷鏈接。java
com.datastax.driver.core.Statement類,Statement抽象類,SimpleStatement、PreparedStatement、BoundStatement、BatchStatement、BuiltStatement算法
定製編譯碼器 codec
ResultSet中的Row。getString()請求id列,可能會收到一個CodecNotFoundException,表示驅動不知道將CQL類型uuid映射到java.util.String. 驅動默認維護了一個默認的映射列表。編譯碼器codec包含java與CQL類型映射,用來應用和cassandra之間來回轉換數據。驅動提供com.datastax.driver.core.TypeCodec<T>,能夠Cluster管理CodecRegistry註冊。
cluster.getConfiguration().getCodecRegistry().register(myCustomCodec).
映射到備選的日期/日期格式;列表映射到集合等等。緩存
反覆查詢使用PreparedStatement,專門爲高效查詢準備。第一次會向節點發送一次這個語句的結構進行準備,而後返回這個語句的一個句柄。使用這個準備語句時,只須要發送句柄和參數。PreparedStatement能夠防止注入攻擊,能夠設置一致性級別,重試策略和跟蹤。PreparedStatement.getPreparedID()看到句柄。
PreparedStatement不是Statement的子類,這樣能夠避免傳入一個未綁定的PreparedStatement致使錯誤。服務器
com.datastax.driver.core.querybuilder.QueryBuilder,流式API,適用查詢結構有變化,防止注入。
這種狀況很難使用PreparedStatement。QueryBuilder使用BuiltStatement。app
對象映射器
對象映射API在cassandra-driver-mapping.jar.對象映射器會抽取註解,使用註解將java類映射到表或者用戶自定義類型(UDT)。負載均衡
策略
java驅動提供多個策略接口,能夠用來驅動程序行爲調優。包括負載均衡,重試請求,管理節點鏈接等等。
負載均衡策略
防止單節點做爲過多請求的協調節點,能夠實現com.datastax.driver.core.policies.LoadBalancingPolicy接口實現。每一個LoadBalancingPolicy必須提供一個distance(),根據HostDistance枚舉將集羣中各個節點劃分爲本地節點和遠程或忽略節點。驅動更願意和本地節點交互。newQueryPlan(),根據查詢的順序返回一個節點列表。LoadBalancingPolicy還能夠根據節點上線下線給通知,防止查詢計劃包含下線節點。
基本的負載均衡策略:RoundRobinPolicy,DCAwareRoundRobinPolicy。
RoundRobinPolicy和DCAwareRoundRobinPolicy的區別是,DCAwareRoundRobinPolicy會盡可能選本地DC。RoundRobinPolicy在全部節點中負載均衡。
TokenAwarePolicy,根據分區鍵選擇一個副本的節點進行請求。
TokenAwarePolicy下再包裝RoundRobinPolicy或DCAwareRoundRobinPolicy。異步
重試策略
cassandra節點不可達,驅動會透明的嘗試其餘節點並在後臺調度從新鏈接死亡節點。驅動還提供重試機制:ide
com.datastax.driver.core.RetryPolicy:onReadTimeout,onWriteTimeout,onUnavaliable.
RetryPolicy的實現:
DefaultRetryPolicy:很是有限條件下重試
FallthroughRetryPolicy:歷來不建議重試,老是建議拋出異常
DowngradingConsistencyRetryPolicy:下降一致性級別,使得查詢更可能成功。
可使用LoggingRetryPolicy包裝,每次重試能夠記錄日誌。
集羣的RetryPolicy應用在該集羣的全部查詢,除非在Statement.setRetryPolicy去覆蓋某次的查詢策略。ui
預測執行策略
若是一個協調節點在預約時間間隔沒響應,就會在不一樣的協調節點啓動相同查詢,有一個節點響應,就返回結果,取消別的節點查詢。默認採用NoSpeculativeExecutionPolicy,不會執行任何預測執行。ConstantSpeculativeExecutionPolicy,按一個固定延遲(毫秒)調度重試。PercentileSpeculativeExecutionPolicy,根據觀察到的協調節點的延遲,在一個延遲以後預測執行。加密
地址轉換器
com.datastax.driver.core.policies.AddressTranslator接口轉換地址。默認轉換器:IdentityTranslator,保留IP地址不變(rpc_address).
元數據
Cluster.getMetadata()
com.datastax.driver.core.Metadata類會提供集羣有關信息,包括集羣名,schema,集羣中已知的主機。Cluster對象會維護與一個節點的長鏈接,用來維護集羣的狀態和拓撲信息,獲取到全部節點。
驅動能夠監控節點,Host.StateListener接口註冊監聽器,onAdd,onRemove,onUp,onDown.
schema的建立,是在一個節點完成再gossip同步的。
cassandra日誌默認debug級別。
java驅動提供客戶端監控程序,使用Dropwizard Metric去提供指標,包括有關鏈接,任務隊列,查詢和錯誤(鏈接錯誤,超時,重試,預測執行的指標)等。
Cluster.getMetric()獲取本地驅動指標。
Metric和Jmx結合獲取遠程監控指標。默認啓用JMX報告。
支持多種語言的驅動Java、Python、C/C++、C#、Ruby、Node.js、PHP