[Cassandra教程] (七)Java API 进阶 - 数据库连接池

2016年09月09日 16019点热度 4人点赞 0条评论

上一篇文章《Java API 简单例子》之中,我们介绍了使用Java API 对Cassandra的简单操作。 本节将开始稍微深入的介绍一些进阶操作。本节将介绍数据库必须要知道的一个概念:数据库连接池(Connection Pool)

文章来源:http://www.flyml.net/2016/09/09/cassandra-tutorial-java-api-connection-pool/

数据库连接池的原理:

连接复用。通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。要知道,资源的申请、占用、释放都是非常消耗性能的操作。

常见的数据库都会支持这个特性~ 在MySQL/Oracle JDBC 之中,如果需要支持连接池,必须使用第三方的包,常见的如:DBCP,Druid,C3P0 等等。 而在Cassandra Java Driver 之中,天生就支持这个特性。

回忆一下,上一篇文章之中我们是如何连接上Cassandra数据库的:

 

在此基础之上,我们增加数据库连接池进去:

注意上面的第2行与第5行。 实际上,Cassandra默认就启用了连接池的功能,只是没有显性的表示出来。比如我们可以用下面的代码获取连接池对象:

关于Cassandra之中数据库连接池的完整选项,可以参考官方说明

重要选项:并发连接数。 这个可以参考下面的代码:

其中有一些概念需要说明一下:

  • HostDistance.LOCAL 与 HostDistance.REMOTE
    • 当你只有一个DC的时候,设置Local即可
    • 当你还有其他的DC需要连接,那么就需要设置Remote
  • setCoreConnectionsPerHost(HostDistance.LOCAL, 4)
    • 表示和集群里的机器至少有2个连接。注意是和集群里的每个机器都至少有2个连接
  • .setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
    • 最多10个连接
  • 其他的完整API 官方说明: click me (针对3.1 版本)

在调优Cassandra集群性能的时候,连接数是一个比较有用的设置。 根据不同的机器性能与业务压力,选择合适你自己场景的数值。在当前最新大版本(3.x) 之上, 默认数值为core=max=1。 也就是说,这个数值设置还是非常保守的! 如果你的机器性能不错,可以尝试将core 或者 max 加大。 并且当core != max 的时候, Cassandra会自动根据业务压力调整连接数的大小。

这一点有点见仁见智了。 就像Java的Heap Size。 在启动的时候也可以进行设置,但是很多场景之下,会设置min = max, 保证一开始就能占用到足够的资源。 对于DB来说,频繁的占用、释放资源,对性能损耗也不小。

文章来源:http://www.flyml.net/2016/09/09/cassandra-tutorial-java-api-connection-pool/

关于Cassandra性能测试,可以参考一篇博文:Cassandra性能测试

如果你觉得太长了,可以直接看他的结论:

  • SSD性能是好于传统机械硬盘,但提升的空间并没有预期的大
  • 读性能受Compcation和Row Cache影响较大,对于读敏感的业务场景最好打开
  • 读写同时进行时,读性能影响较大,即使Compaction和Row Cache已调整
  • Compcation对于读性能提升明显,但实际场景中不可能太频繁执行
  • 写性能受影响较小,不管是硬盘介质还是数据整理方式
  • 使用多线程可以线性提升整体的TPS,但写性能比读性能还是要好很多
  • 尽量使用批量操作,可以减少网络IO开销,极大提升性能
  • Cassandra在写入上有极大的优势,并且在高并发下性能更好

文章来源:http://www.flyml.net/2016/09/09/cassandra-tutorial-java-api-connection-pool/

另外一个个人比较常用的设置:

这个选项默认是开启的,默认30s。这个选项的作用是,当一个链接闲置了一段时间之后,client-side就会自动写一些无用的数据到DB(当然DB会自己处理)以保持连接还继续保持。

本文为原创文章,转载请注明出处

 

RangerWolf

保持饥渴的专注,追求最佳的品质

文章评论