为了账号安全,请及时绑定邮箱和手机立即绑定

Cassandra的Session会话

标签:
NoSql

前言

驱动程序采用的是

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-core</artifactId>
  <version>3.5.0</version>
</dependency>

默认创建

默认情况下,session是没有指向任何的keyspace。当我们在查询的时候需要指定keyspace前缀

Session session = cluster.connect();
ResultSet rs = session.execute("select release_version from system.local"); 

这里就指定keyspace为system,查询的表为local

指定keyspace创建

还有一种方法在创建session时指定keyspace,如下

Session session = cluster.connect("system");
ResultSet rs = session.execute("select release_version from local"); 
session.execute("select * from otherKeyspace.otherTable where id = 1");

在创建session的时候指定了keyspace,然后在执行查询语句的时候就可以不用写前缀。但是如果要查其他keyspace里面的数据的时候就不得不带上前缀。

也许你想过动态的创建session,每个keyspace一个session,可以,demo如下:

Session session1 = cluster.connect("ks1");
Session session2 = cluster.connect("ks2");

这种方式不是不行,但是需要注意的是,连接池是在session级别上建立的,每创建一个session将会额外的消耗一部分系统资源。

而且,由官网介绍,在使用命名的session时,在某些情况可能会导致意外的线程阻塞问题。
如果采用的是全异步模式,建议使用没有keyspace的命名空间。

注:如果使用use来改变keyspace,这将会改变session的默认的keyspace。那么多如果是在多线程共享的情况下,某一个线程突然改变了keyspace,这将会导致其他线程出现问题

总结

通过上面的了解,建议采用单个session,不使用keyspace命名,在查询的时候手动指定keyspace前缀

关于内部类的详细文章可以参考目录 [smxknife's Java内部类]

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消