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. java注解学习笔记总结

    注解的理解 ① jdk 5.0 新增的功能 ② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理.通过使用 Annotation,程序 ...

  2. 鸿蒙HarmonyOS应用开发落地实践,Harmony Go 技术沙龙落地北京

    12月26日,华为消费者BG软件部开源中心与51CTO Harmony OS技术社区携手,共同主办了主题为"Harmony OS 应用开发落地实践"的 Harmony Go 技术沙 ...

  3. Jquery UI Autocomplete 在mvc中应用

    首先添加引用 <link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" type ...

  4. 风炫安全WEB安全学习第二十七节课 XSS的防御措施

    风炫安全WEB安全学习第二十七节课 XSS的防御措施 XSS防御措施 总的原则 控制好输入/输出 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证. 转义:所有输出到前端的数据都 ...

  5. Nginx解决前端访问资源跨域问题

    被前端跨域问题折磨快2天后,终于用ngnx的方式解决了,所以在此总结下. 该篇只探讨如何用Ngnx解决跨域问题,对于原理不作讨论. 1.首先介绍Windows环境下Nignx的相关命令操作 nginx ...

  6. Java API 操作HBase Shell

    HBase Shell API 操作 创建工程 本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse. 然后创建Java项目名字叫hbase-test 配置运行环境 ...

  7. Python实验6--网络编程

    题目1 1.编写程序实现基于多线程的TCP客户机/服务器程序. (1)创建服务器端套接字Socket,监听客户端的连接请求: (2)创建客户端套接字Socket,向服务器端发起连接: 服务器端套接字 ...

  8. 5.1中repair table

    mysql> repair table xs;+---------+--------+----------+----------+| Table | Op | Msg_type | Msg_te ...

  9. 安装sendmail

    yum install -y sendmail yum install -y sendmail-cf 启动 service sendmail start 发送邮件 cat nihao.txt |mai ...

  10. LeetCode671. 二叉树中第二小的节点

    题目 纯暴力 1 class Solution { 2 public: 3 vector<int>ans; 4 int findSecondMinimumValue(TreeNode* r ...