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