【问题标题】:Cassandra Session vs Cluster What to Share?Cassandra 会话与集群 分享什么?
【发布时间】:2015-04-30 14:54:45
【问题描述】:
考虑一下 Cassandra 的 Session 和 Cluster 类(Java 驱动程序)我想知道有什么区别。在 Hibernate 中,每次都会创建一个会话并共享会话工厂。
从许多来源我了解到,它被认为是创建一个会话并在多个线程之间共享。
我确实觉得这有点古玩。我本来希望我为每个线程或正在进行的操作/任务创建一个会话。
- 这样做有问题吗?
- 性能影响是什么?会话线程安全吗?
- 我是否会在较大的结果集上遇到游标问题(或者 cassandra 是否没有游标?)
- 假设 Session 是线程安全的是否安全,或者是否存在我应该注意的边缘情况?
【问题讨论】:
标签:
java
session
cassandra
【解决方案1】:
在传统的 RDBMS 中,会话 通常指的是事务上下文,并且许多实现不是线程安全的。同时,session 通常是在某种连接池之上实现的,连接的终止(通过错误)也会终止会话。
在 Cassandra 中,实际上并没有针对多个调用的事务上下文,因此一旦连接到 keyspace,会话 即可共享且无需重新建立。此外,驱动程序已经处理了重新连接和连接池,因此 session 不依赖于连接。
最后,针对会话准备的语句被缓存,重新创建会话效率低下,必须不断地重新准备语句。