DataStax驱动最成熟。
默认,驱动程序会使用第一个连接的节点作为支持的版本协议。如果集群存在高低版本的节点(比如升级场景),如果驱动先连接不同不同版本的节点,可能会出现不兼容。
驱动支持压缩客户端和cassandra节点之间的消息。目前支持2种压缩算法:LZ4和SNAPPY。默认为NONE,即不压缩。可以调用Cluster.Bilduer.withCompression()操作来覆盖这个设置。
认证和加密
驱动可插拔实现com.datastax.driver.core.AuthProvider。比如支持PlainTextAuthProvider(明文用户名密码校验)。服务器也可以配置加密选项,驱动得对应支持。有个Scram的方案,可以实现不传递用户名密码的方式实现用户名密码校验。
一个Session会维护一个集群的连接,有个连接池,连接所有的节点,开销很大,所以要尽量复用。默认每个节点一个连接。CQL原生协议是异步的,允许每个连接可以有多个请求。v2协议同时有128个请求,v3和v4允许最多32768个请求。PoolingOption可以设置向上或向下扩展连接数。同时有连接的缓存期,防止不断地建立和撤销连接。

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。

对象映射器
对象映射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节点不可达,驱动会透明的尝试其他节点并在后台调度重新连接死亡节点。驱动还提供重试机制:

com.datastax.driver.core.RetryPolicy:onReadTimeout,onWriteTimeout,onUnavaliable.
RetryPolicy的实现:
DefaultRetryPolicy:非常有限条件下重试
FallthroughRetryPolicy:从来不建议重试,总是建议抛出异常
DowngradingConsistencyRetryPolicy:降低一致性级别,使得查询更可能成功。
可以使用LoggingRetryPolicy包装,每次重试可以记录日志。
集群的RetryPolicy应用在该集群的所有查询,除非在Statement.setRetryPolicy去覆盖某次的查询策略。

预测执行策略
如果一个协调节点在预定时间间隔没响应,就会在不同的协调节点启动相同查询,有一个节点响应,就返回结果,取消别的节点查询。默认采用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

cassandra权威指南读书笔记--客户端的更多相关文章

  1. cassandra权威指南读书笔记--Cassandra架构(3)

    分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处 ...

  2. cassandra权威指南读书笔记--安全

    认证和授权driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.密码认证器cassandra还支持自定义,可插拔的认证机制.默认的认证器:or ...

  3. cassandra权威指南读书笔记--性能调优

    cassandra自带测试工具cassandra-stress.nodetool proxyhistograms可以在多个节点运行,发现最慢的协调节点.nodetool tablehistograms ...

  4. cassandra权威指南读书笔记--监控&维护

    cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...

  5. cassandra权威指南读书笔记--读写数据

    写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...

  6. cassandra权威指南读书笔记--配置cassadnra

    配置集群时,要求所有节点的集群名,分区器,snitch必须相同.种子节点最好相同. 种子节点:最好每个DC,配置2个,这样即使一个DC中一个种子节点挂了,仍然有一个中子节点可用.种子节点被认为是最先加 ...

  7. cassandra权威指南读书笔记--Cassandra架构(2)

    环和令牌cassandra的数据管理是用一个环来表示.为环中的每个节点分配一or多个数据范围,用token描述.token由64位整数ID表示,范围-2^(63)~2^(63)-1.使用对分区键进行一 ...

  8. cassandra权威指南读书笔记--Cassandra架构(1)

    结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...

  9. cassandra权威指南读书笔记--数据建模

    没有join操作.有轻量级事务和批处理,但是没有外键等.反规范化.3.0支持物化视图,允许在一个表上创建数据的多个物化视图.使用cassandra要从查询入手,而不是先从数据模型开始.先对查询建模,然 ...

随机推荐

  1. 在onelogin中使用OpenId Connect Implicit Flow

    目录 简介 OpenId Implicit Flow 创建onelogin的配置 页面的运行和请求流程 关键代码 总结 简介 onelogin支持多种OpenId Connect的连接模式,上一篇文章 ...

  2. 新来的运维这样用HDFS,CIO都懵了···

    摘要:本文主要研究了HDFS文件系统的读写流程以及基于MRS在windows客户端下读写HDFS文件的实现. HDFS(Hadoop分布式文件系统)是Apache Hadoop项目的一个子项目. HD ...

  3. 【Java基础】Java8 新特性

    Java8 新特性 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更灵活的代码. L ...

  4. 拍摄、剪辑vlog的思路

    这篇文章是看了很多狂阿弥_ 的作品后 产生的一些小小总结.这些技法只是锦上添花,阿弥作品真正好的地方在于他细腻的情感,真实的对白,和打动人心的满分作文. 优秀的Vlog ,在于它和观众产生的情感共鸣. ...

  5. Hadoop源码:namenode格式化和启动过程实现

    body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...

  6. kubernets集群的安全防护(下)

    一   集群角色以及集群角色绑定 1.1  前面我们提到过角色以及角色绑定,那么现在为什么会出现集群级别的角色以及角色绑定,作用有如下所示 我们如果需要在所有的命名的空间创建某个角色或者角色绑定的时候 ...

  7. 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS

    实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 网页分为发牌区和牌池,上面为发牌区,下面是牌池区 2. 代码实现 2.1 HTML和JS代码 ` <link rel="s ...

  8. DOI技术扫盲一

    DOI:  desktop office intergration   桌面办公软件集成简单的将,就是我们在Windows桌面中打开的办公软件(如:word,excel,pdf等等)可以在SAP系统进 ...

  9. PW2320芯片N沟道增强型MOSFET

    PW2320采用先进的沟道技术,以提供优良的RDS(ON),低栅电荷和电压门极电压低至2.5V时工作.该装置适合用作电池保护或在其他开关应用中. 特征 VDS=20V ID=8A RDS(开)< ...

  10. expect的使用

    1. expect概述 1.1 expect的功能 脚本执行时,有时会需要人工进行交互输入,这时可以通过expect工具来实现自动交互. expect是一种shell解释器,但是expect可以在命令 ...